Disponibili i nuovi report del mese di maggio sui progressi raggiunti dall’emulatore RPCS3

Disponibile il nuovo report sui progressi raggiunti dall’emulatore RPCS3 nel mese di maggio. RPCS3 ad oggi è l’unico programma che ci permette di emulare gran parte dei titoli commerciali della console PlayStation 3 su PC Windows e Linux.

Diverse le modifiche riportate da Nekotekina e kd-11 sulla SPU e RSX. Nekotekina ha implementato il supporto PIC SPU mentre kd-11 ha migliorato l’implementazione della cache surface. 

Nel frattempo, Megamouse ha apportato diversi miglioramenti all’interno dell’interfaccia utente, GalCiv ha revisionato il gestore del pad DualShock 3 e le regressioni affrontate da ruipin nel back-end SPU LLVM quando utilizzava la Mega dimensione del blocco diSPU.

Oltre al seguente rapporto, ulteriori dettagli sul lavoro di Nekotekina e kd-11 durante il mese di maggio e sui contributi futuri possono essere trovati nei loro report settimanali sul Patreon.

Sommario

Questo mese RPCS3 ha raggiunto una delle pietre miliari più significative nella compatibilità dei giochi. Dopo un’intensa attività di test e fusione dei duplicati, come menzionato nel rapporto del mese precedente, la categoria Playable ora viene legata alla categoria Ingame al 43,71%.

RPCS3 ha percorso una lunga strada per avere la categoria Playable ad un passo dal sorpasso della categoria Ingame. D’altra parte, la sezione Intro ha visto un modesto calo mentre il numero di giochi Loadable e Nothing è rimasto invariato.

Per un aspetto più dettagliato, potrete visualizzare la pagina della cronologia per la compatibilità dei giochi che possono essere eseguiti su RPCS3.

Principali miglioramenti

All’inizio di maggio, kd-11 ha iniziato a migliorare il modo in cui RPCS3 gestisce la cache surface, il che non è banale dal momento che il rendering della PlayStation 3 su di un framebuffer è diverso da un PC.

Originariamente il piano di kd-11 consisteva nell’implementare framebuffer di dimensioni variabili al fine di risolvere un problema nel metodo di rendering utilizzato dall’emulatore. 

In precedenza, RPCS3 manteneva un elenco di tutti i framebuffer disponibili e le loro posizioni nella memoria del sistema e, sebbene fosse veloce, presentava comunque i suoi limiti. 

Per continuare a provare e mantenere il più semplice possibile, diamo un’occhiata ad alcuni diagrammi su come RPCS3 gestisce i framebuffer:

I framebuffer di dimensioni variabili erano una prima idea, dove invece di creare un viewport della piccola area rossa (vedi immagine sopra) e prima di disegnare il cerchio all’interno, veniva creata una grande area che copriva il framebuffer completo (l’intera area grigia) ma questo era solo il rendering verso il rosso della zona. 

Ciò renderebbe la “variabile” delle dimensioni del framebuffer in quanto è consentito che sia più grande dell’area esatta da renderizzare e che questa si aggiusti dinamicamente per preservare i dati. Sembra una buona idea, ma c’è un difetto critico e l’ordine della memoria.

Ogni richiamo in RPCS3 contrassegna il framebuffer con un valore per identificare quanto è nuovo, in modo che quando ricreiamo un’immagine, inizia sempre a disegnare i pixel più vecchi per primi.

Nell’esempio sopra, non importa se rendiamo il cerchio rosso o blu prima poiché sono separati l’uno dall’altro. Disegnare il triangolo nero è ok. Anche disegnare il cerchio blu va bene. 

Ma quando è il momento di disegnare il cerchio rosso, l’area grigia viene ereditata dal triangolo nero ora e viene etichettata come parte dei nuovi dati. Ciò fa sì che l’area blu sia più vecchia dell’area grigia, risultando completamente sovrascritta quando disegniamo la scena utilizzando framebuffer di dimensioni variabili.

Quindi, kd-11 doveva tornare al tavolo da disegno e trovare una soluzione. Quale era quello di eseguire incroci per tutte le letture e le scritture. Invece dell’area rossa che si estende fino al limite del frame buffer (area grigia), ora possiamo fare questo:

Nell’esempio sopra, ora abbiamo diviso il framebuffer in tre superfici, mentre l’area rossa viene sostituita da un nuovo framebuffer e taggato come nuovo che ci consente di aggiornarlo separatamente dal resto delle superfici.

Questo risolve una serie di problemi con i giochi che avevano uno schermo nero in determinati scenari. In Ratchet & Clank: A Crack in Time, questo è accaduto in certi punti di ogni livello, rendendo difficile progredire nel gioco.

Con Resistance 3, si è verificato quando l’energia HP era bassa. Infine, Nascar 14 e Nascar Inside Line emettevano anche uno schermo nero ogni volta che si schiantava contro un’auto per alcuni secondi.

Anche la grafica di NeverDead è stata riparata, rimuovendo l’effetto schermo diviso. Ci sono sicuramente molti altri giochi che hanno giovato da queste modifiche, quindi sentitevi liberi di farci sapere se trovate qualcosa!

Supporto PIC per SPU (#5944)

Continuando ad ottimizzare l’emulazione della Synergistic Processing Unit (SPU), questo mese Nekotekina ha aggiunto il supporto per il codice indipendente dalla posizione (PIC), portando con sé meno balbuzie e più frame al secondo!

Per ricapitolare, il recompiler SPU funziona prendendo pezzi di codice di gioco pensato per essere eseguito su PlayStation 3, analizzandolo e generando codice che può essere eseguito sul proprio computer (con l’uso di LLVM), che viene quindi memorizzato come programma

I programmi vengono creati ogni volta che viene identificato un blocco univoco e memorizzato nella cache per essere riutilizzato quando lo stesso blocco viene eseguito nuovamente in un secondo momento. 

Questo ci aiuta a evitare l’arduo processo di ricompilazione in quanto l’emulazione viene momentaneamente messa in pausa ogni volta che un nuovo chunk di gioco viene ricompilato.

Dato che l’emulatore non ha visibilità nel codice del gioco, non c’è modo di speculare su quale chunk verrà eseguito e, di conseguenza, tutte queste ricompilazioni vengono eseguite in fase di runtime. Ciò provoca un calo delle prestazioni quando vengono ricompilati nuovi programmi SPU. 

Per fortuna, questo processo in genere è durato solo pochi minuti e il miglioramento delle prestazioni ottenuto dall’utilizzo del correttore SPU LLVM è valso la pena aspettare. 

Tuttavia, per certi titoli (notoriamente Red Dead Redemption), il compilatore SPU compilava continuamente nuovi programmi SPU (chiamati colloquialmente come compilazione infinita) dando l’impressione che il gioco stesse generando continuamente pezzi unici di codice. 

Tuttavia, da un esame più attento, non era così. Mentre i giochi utilizzavano la stessa porzione di codice, ogni volta veniva caricato in un indirizzo di memoria diverso.

Nell’implementazione precedente, i programmi SPU hanno utilizzato l’indirizzamento assoluto, rendendoli dipendenti dal caricamento in una posizione specifica. Se lo stesso chunk è stato caricato in un altro luogo, è stato erroneamente identificato come codice univoco e ricompilato di nuovo.

Qui che entra in gioco la richiesta di pull di Nekotekina, consentendo la generazione di questi programmi in modo indipendente dalla posizione, rendendoli caricabili ovunque e quindi riutilizzabili.

Questa soluzione ha completamente risolto il problema della compilazione infinita e ha ridotto notevolmente il numero di programmi SPU compilati.

Ad esempio, nel caso di Spider-Man Shattered Dimensions, solo trenta secondi di gameplay genererebbero in precedenza oltre 11.000 programmi SPU con solo 2.054 di quei programmi in realtà unici.  Ora, con i miglioramenti di Nekotekina, questo titolo genera solo 2.113 programmi SPU nello stesso intervallo di tempo.

Questo è un enorme miglioramento che avvantaggia quasi tutti i giochi quando si utilizza il ricompilatore SPU LLVM. Ad esempio, quando FPS ha utilizzato fino a 11 quando si utilizza un attacco intensivo in Fist of the North Star: Ken’s Rage, ora rimane a 25-30 FPS. Attualmente funziona solo con blocchi di dimensioni Safe Mega SPU.

Confronto del numero di moduli SPU compilati prima e dopo queste modifiche tra vari giochi. Nota che alcuni giochi mostrati in questo grafico (GTA V o One Piece) in precedenza stavano compilando i moduli SPU indefinitamente

Migliorato il supporto delle raccolte di giochi (#4450)

Tra i vari miglioramenti della GUI di questo mese, Megamouse ha rielaborato anche il modo in cui RPCS3 gestisce i dischi di raccolta dei giochi.

Prima di approfondire le modifiche apportate, ecco una rapida panoramica su come sono strutturati i dischi PlayStation 3. Ogni disco contiene 2 cartelle, ovvero PS3_GAMEPS3_Update e un file, PS3_DISC.SFB

Questa è la disposizione generale per i dischi del gioco. Il file PS3_DISC.SFB non contiene alcun dato rilevante al suo interno oltre al product ID.

Tuttavia, sebbene il file non contenga informazioni critiche, il file stesso viene utilizzato da RPCS3 per identificare l’esistenza di un gioco basato su disco.

Una volta identificato, l’emulatore esegue la scansione della cartella PS3_GAME per estrarre tutti i dettagli necessari sul gioco e compila l’elenco delle gamme per consentire agli utenti di avviare facilmente il gioco.

Con le raccolte di giochi, c’erano due distinti layout di file. Il primo (e più comune) layout ha seguito il layout di cui sopra con tutti i giochi memorizzati nella cartella PS3_GAME e visualizzati come un singolo gioco nella lista dei giochi. 

Una volta lanciato, agli utenti verrà chiesto di selezionare il gioco specifico che desiderano avviare e il gioco selezionato si avvierà in una nuova finestra.

Schermata di lancio della collection di Kingdom Hearts HD 1.5 ReMIX che consente la selezione dei titoli presenti all’interno della collection.

Tuttavia, con il secondo tipo, il layout del file è leggermente diverso. Qui, ogni gioco della collezione viene memorizzato separatamente e quindi si trovano cartelle aggiuntive come PS3_GM01 e PS3_GM02 all’interno di un disco. 

Questo può essere visto in dischi come The Disgaea Triple Play Collection, Ultimate Stealth Triple Pack e Ultimate Action Triple Pack, tra gli altri. 

Quando si inseriscono questi dischi in una PlayStation 3 vera e propria, nella lista dei giochi appaiono tre giochi a disco distinti rispetto a uno solo. 

Nell’implementazione precedente di RPCS3, solo i contenuti presenti nella cartella PS3_GAME sono stati scansionati e popolati alla lista di gamelist e quindi i giochi presenti nelle cartelle aggiuntive sono stati ignorati.

Ecco un confronto che mostra la differenza di layout del file tra i dischi normali e i dischi di raccolta speciali

Per risolvere questo problema, Megamouse ha rielaborato l’implementazione esistente di rilevamento dei file di gioco aggiungendo m_game_dir, una nuova variabile in cui puntare le cartelle di gioco pertinenti. 

Ora, invece di codificare hardcoding la cartella PS3_GAME, l’emulatore cercherà altre cartelle e identificherà se sono anche giochi e le inserirà correttamente nella gamelist di RPCS3.

Elaborazione batch per tutti i titoli (#5519)

Infine, abbiamo un miglioramento della qualità della vita di Megamouse, che ha aggiunto l’opzione per compilare la cache PPU contemporaneamente per tutti i titoli, ma anche per cancellare tutte le cache o configurazioni personalizzate.

Sono finiti i giorni in cui dovevo compilare singolarmente la cache PPU per ogni titolo. Anche se questo miglioramento potrebbe non essere così eccitante come quelli sopra menzionati, offre un conforto tanto necessario che i normali utenti di RPCS3 apprezzeranno sicuramente.

Questa nuova funzionalità è accessibile in File > All Titles.

Giochi

Yakuza 3 e 4

Grazie ai miglioramenti apportati da kd-11 alla gestione dei dati dei frame, Yakuza 3 & Yakuza 4 non ha più vertici esplosivi durante l’utilizzo delle GPU AMD. 

Questo cambiamento apporta un’ulteriore parità di output grafico tra le GPU Nvidia e la GPU AMD per fornire agli utenti un’esperienza più uniforme indipendentemente dall’hardware utilizzato. 

Genji: Days of the Blade

Genji: Days of the Blade ora è il secondo titolo di lancio per PlayStation 3 correttamente riproducibile dopo Ridge Racer 7.

Cash Gun Chaos DLX

Dall’angolo della sala giochi, questo mese ha visto Cash Gun Chaos DLX diventare completamente giocabile. Questo sparatutto in stile arcade funziona con prestazioni e grafica costanti. Guarda alcuni filmati di gioco qui sotto:

SIREN: Blood Curse

L’esclusivo survival horror per PlayStation 3, SIREN: Blood Curse è stato trovato giocabile questo mese. Un utente dei nostri forum, jade010, è riuscito a finire questo gioco anche su RPCS3. Nota che hai bisogno di un DualShock 3 o 4 per giocare a questo gioco in quanto utilizza il giroscopio dei controller.

One Piece: Pirate Warriors

Questo è uno dei titoli che è migliorato dopo il supporto PIC di Nekotekina per SPU. Mentre il gioco funziona bene con grandi prestazioni e grafica, soffre di balbuzie nell’audio quando ci sono troppi nemici sullo schermo, mantenendo comunque il titolo giocabile.

Mortal Kombat vs. DC Universe

Questo gioco crossover ora è giocabile con grande grafica e prestazioni. In precedenza, questo titolo ha sofferto di vari problemi grafici e non ha funzionato con il ricompilatore PPU LLVM. Tuttavia, grazie ai miglioramenti apportati all’emulatore negli ultimi mesi, tutti questi problemi sono stati affrontati in modo sommario.

Cross Edge

Un’altra esclusiva per console, Cross Edge, un titolo RPG tattico con personaggi di una vasta gamma di franchise, è stato trovato giocabile questo mese.

Dark Mist

Per finire la nostra carrellata di giochi, Dark Mist, è stato trovato giocabile questo mese. Questo titolo in precedenza richiedeva l’abilitazione di LLE libvdec che riduceva le prestazioni a sufficienza per impedirne la riproduzione. 

Tuttavia, con i miglioramenti apportati all’emulatore, lo stesso non è più necessario. Gli utenti dovrebbero notare che questo titolo attualmente funziona solo con il renderer OpenGL.

Altri miglioramenti

Ci sono state numerose altre richieste di pull unite durante il mese che non sono riuscite a raggiungere la sezione Major Improvements.

Abbiamo raccolto un elenco di tutti questi miglioramenti qui e abbiamo allegato una breve panoramica a ciascuno di essi.

Assicurati di controllare i link forniti, dato che le pagine GitHub di solito rivelano ulteriori dettagli, così come i cambiamenti del codice stesso. Per vedere l’elenco completo delle richieste di pull direttamente su GitHub, clicca qui.

Potrete scaricare la versione più recente dell’emulatore collegandovi a questo indirizzo per PC Windows e Linux. Se vi piace potrete anche contribuire allo sviluppo con una piccola donazione sul Patreon.

Fonte: rpcs3.net

(Visited 1 times, 1 visits today)

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *