Home Emulatori Disponibili i nuovi report del mese di novembre sui progressi raggiunti dall’emulatore...

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

881
0

Disponibile il nuovo report sui progressi raggiunti dall’emulatore RPCS3 nel mese di novembre. 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.

Il report descrive in dettaglio il lavoro svolto da kd-11 sulla riscrittura della FIFO e l’elaborazione delle chiamate che ha portato ad un notevole miglioramento delle prestazioni.

Un grande contributo lo dobbiamo anche ad un collaboratore di vecchia data, GalCiv, che ha portato alla correzione di un gran numero di bug in molti giochi.

Abbiamo visto girare anche tanti titoli esclusivi come Gran Turismo 5 e MLB: The Show 16 eseguiti per la prima volta su RPCS3, mentre questa è la prima volta che la percentuale dei giochi nelle categorie Ingame e Playlable ha superato l’80%.

Grazie ai numerosi test eseguiti dai vari tester, sono stati spostati 95 giochi dalle categorie Intro e Loadable. Inoltre, alcuni titoli duplicati in tutte le categorie sono stati identificati e uniti, migliorando la precisione complessiva dell’elenco di compatibilità. Infine, l’inafferrabile categoria Nothing è scesa a soli 4 giochi.

Principali miglioramenti

Riscritta l’elaborazione RSX FIFO

Chi ha seguito i miglioramenti per il chip grafico RSX negli ultimi mesi saprà di certo come lo sviluppatore kd-11 abbia attribuito una maggiore importanza alla correzione di bug e pulizia nel codice.

Mentre questo esercizio ha apportato enormi miglioramenti alla grafica, il suo vero scopo era gettare le basi per una profonda revisione della pipeline nel rendering RSX.

Sebbene fossero necessarie correzioni più piccole, kd-11 aveva supposto che per superare le limitazioni prestazionali viste in certi titoli tripla AAA, ci doveva essere una riscrittura significativa su come RPCS3 gestisce le chiamate draw e la coda dei comandi FIFO.

Gli oggetti in computer grafica 3D vengono resi come una mesh che è una raccolta di vertici, bordi e facce che definiscono la forma. Una chiamata di estrazione è un comando fornito dalla CPU alla GPU per il rendering di una mesh.

Tuttavia, poiché CPU e GPU elaborano i dati a velocità diverse, esiste un buffer di comando (o una coda) per le chiamate di estrazione per eliminare eventuali rallentamenti.

Questa coda di comando funziona su di un meccanismo di elaborazione FIFO (First In First Out). Per quanto riguarda la PlayStation 3, il meccanismo di elaborazione FIFO è la coda di comando che Cell utilizza per comunicare le istruzioni con il chip RSX.

L’obiettivo di kd-11 era quello di creare un nuovo approccio che fosse più efficiente e tagliare il lavoro non necessario che richiede comunque tempo.

L’approccio iniziale si è concentrato sull’ottimizzazione della coda di comando FIFO, ma gli esperimenti hanno dimostrato che ciò non era effettivamente necessario ed era più importante migliorare il modo in cui vengono elaborate le chiamate di estrazione.

La maggior parte dei giochi ha circa 1.000-3.000 richiami per frame, ma alcuni giochi (ad esempio, i giochi delle serie Ratchet e Clank) hanno oltre 10.000 chiamate di estrazione per frame.

Questi titoli essendo delle esclusive erano prevalentemente poco ottimizzate e in genere avrebbero portato RPCS3 ad una scansione.

Per gestire questo, in primo luogo, il codice RSX è stato rifattorizzato per rendere autonomo l’elaborazione di uno spazio dei nomi, inclusa la separazione del ciclo principale dallo svuotamento. Ciò ha aiutato a migliorare la leggibilità del codice e ha facilitato il processo di implementazione delle ottimizzazioni.

Successivamente, la funzionalità della pipeline è stata ottimizzata in modo che i back-end RSX funzionassero più come un gioco tipico, con aggiornamenti minimi tra le chiamate di estrazione separate.

Alcuni aspetti di entrambi i renderizzatori grafici (OpenGL e Vulkan) sono stati anche riscritti per migliorare l’efficienza e mantenerli in linea con le nuove funzionalità della pipeline.

Queste modifiche preliminari sono riuscite ad alleggerire il carico della CPU riducendo al minimo il carico di trasferimento dei dati tra CPU e GPU. Un aumento delle prestazioni era già visibile nei titoli pesanti di call draw.

Anche nelle fasi iniziali della riscrittura, siamo stati in grado di ottenere una riduzione del 30% del numero di chiamate effettuate

Una volta finalizzati questi cambiamenti, kd-11 ha rielaborato il modo in cui venivano elaborate le chiamate.

Ci sono 2 parti per questo, il primo è quello di ignorare completamente i comandi di inizio/fine FIFO e utilizzare i nostri meccanismi personalizzati per decidere dove segnare l’ambito delle chiamate di estrazione.

Il meccanismo personalizzato pone l’accento sull’ottimizzazione della coda dei comandi e sul miglioramento dell’efficienza del processore dei comandi.

Questi due processi vanno insieme con i suggerimenti che vengono iniettati nello stream FIFO dal processore front-end per massimizzare l’efficienza delle chiamate.

La seconda modifica consisteva nel far aderire dinamicamente il convertitore di frequenza FIFO in base al carico per evitare il rallentamento quando non è richiesto il sovraccarico di elaborazione aggiuntivo.

L’emulatore tenta di rilevare quando la pre-elaborazione FIFO è vantaggiosa e consente solo ottimizzazioni se i benefici superano i costi.

La soglia corrente è di almeno 500 richiami di salvataggio salvati in oltre 2.000 chiamate di disegno per giustificare il sovraccarico.

Infine, con un paio di altri miglioramenti per ottimizzare il throughput delle chiamate draw, abbiamo potuto assistere a massicci miglioramenti delle prestazioni in giochi come Uncharted: Drake’s Fortune, Infamous 1 & Infamous 2, Resistance: Fall of Man e tanti altri.

Migliorato PPU lwmutex locking e thread scheduler (#5314)

Mentre l’emulazione del PPU ha visto grandi passi in termini di prestazioni e compatibilità, esiste sempre la possibilità che alcuni giochi si comportino in modo strano, al punto che l’emulatore non riesce a gestire adeguatamente.

Eladash aveva incontrato una tale eccezione con Le Tour de France 2012 e ha prontamente iniziato a investigare per risolvere il problema. Quello che ha trovato sono state rare inesattezze nell’emulazione PPU per quanto riguarda il blocco di lwmutex PPU e la schedulazione del thread PPU.

Parlando di lwmutex, un mutex è un meccanismo di blocco utilizzato per sincronizzare l’accesso a una risorsa. Quando il mutex è bloccato, gli altri thread non possono accedere alla risorsa tranne quella che acquisisce il mutex.

La PlayStation 3 fornisce una struttura complessa per lwmutex attraverso il suo modulo di sistema “liblv2”. Per richiedere lwmutex, un gioco chiamerebbe in genere la funzione liblv2 che a sua volta chiamerebbe samballs mutex.

Tuttavia, è stato scoperto che alcuni giochi chiamano le samba del mutex direttamente con diversi comportamenti/parametri che non venivano gestiti correttamente dall’emulatore.

Una volta scoperto l’errore, Eladash ha implementato la funzionalità per gestire le chiamate dirette dai giochi in lwmutex.

Per affrontare più errori di asserzione, è stato aggiunto un semplice flag per identificare lo stato del blocco di lwmutex. Ciò ha aiutato i giochi che si chiamavano direttamente lwmutex durante l’avvio per progredire ulteriormente.

In precedenza, Skate si bloccava nella schermata del titolo. Ora, il titolo entra comodamente ingame senza arresti anomali!

Sebbene il problema di lwmutex sia stato affrontato, Le Tour de France 2012 si è ancora rifiutato di caricare il che ha spinto Eladash a eseguire il debug di ulteriori dettagli.

Dopo ulteriori indagini, si è scoperto che il gioco soffriva di una condizione di competizione in cui l’emulatore non stava acquisendo il blocco dello scheduler del thread PPU quando cambiava la priorità del thread. Lo scheduler dei thread PPU utilizza la priorità del thread come suggerimento per allocare le risorse della CPU.

Questo è simile ad un PC, un thread con priorità più alta viene posizionato più vicino all’inizio della coda di thread mentre un thread con priorità inferiore viene spinto verso la fine. Un’altra importante funzione dell’ordine di priorità dei thread è il rilevamento dei thread duplicati.

Quando l’emulatore non ha bloccato correttamente il mutex del programmatore di thread PPU, ha portato a un inserimento di thread errato che ha creato thread duplicati.

Con il problema ora identificato, eladash ha assicurato che il mutex del programmatore di thread PPU sarebbe stato bloccato prima di cambiare la priorità dei thread PPU.

Mentre questo ha definitivamente risolto Le Tour de France 2012, ha anche risolto una serie di crash in altri titoli come Skate, Gran Turismo 5, Super Street Fighter IV, Beyond Two Souls White Album, Gundam Breaker 2, MotorStorm, Borderlands, Backbreaker Vengeance e molti altri!

Garantire che i thread SPU siano interrotti in sys_spu_thread_group_join (#5310)

Tra tutti gli enormi miglioramenti, novembre ha visto il ritorno di GalCiv (RipleyTom), uno sviluppatore che si è preso una pausa da RPCS3 ad agosto 2017. Con il suo ritorno, ha apportato correzioni per una difficile regressione che aveva tormentato RPCS3 per mesi.

Il problema è emerso per la prima volta dopo la famosa richiesta di pull di Nekotekina per SPU ASMJIT v2.0 in aprile, che ha comportato un notevole aumento delle prestazioni e della compatibilità.

Ma come con la maggior parte dei grandi aggiornamenti, questi cambiamenti hanno causato una regressione in titoli come Catherine e Valkyria Chronicles facendoli sospendere prima di raggiungere i menu.

Tuttavia, il problema riguardava solo determinati utenti che montavano una CPU con basso numero di thread (come 4C4T) o CPU con laptop deboli.

Complicando ulteriormente la questione, per alcuni utenti, questo problema si verificava ogni volta mentre per altri utenti si verificava solo a intermittenza.

Ciò indicava l’esistenza di una condizione di competizione che si manifestava solo in determinate circostanze precise, comunemente con risorse CPU insufficienti. Questa volatilità ha reso il problema una vera sfida per il debug. Per questo motivo, GalCiv ha deciso di fare il suo ritorno risolvendo questo problema.

Ma per capire esattamente come l’ha fatto, ecco un veloce aiuto su come i thread SPU vengono gestiti su PlayStation 3. La sequenza di come i thread SPU vengono utilizzati dalla PlayStation 3 è la seguente:

  1. Crea il gruppo di thread SPU (sys_spu_thread_group_create).
  2. Inizializza individualmente ciascun thread SPU (sys_spu_thread_initialize * num_threads).
  3. Avvia tutti i thread SPU nel gruppo SPU (sys_spu_thread_group_start).
  4. Attende il termine dell’esecuzione del gruppo SPU (sys_spu_thread_group_join).
  5. Emette un’istruzione STOP in uno dei thread SPU (sys_spu_thread_group_exit).

Su di una vera PlayStation 3, l’istruzione STOP interrompe istantaneamente tutti i thread SPU, ma lo stesso non è possibile su RPCS3 poiché le istruzioni del nucleo su PlayStation 3 non ci sono in RPCS3.

Arrestare un thread SPU mentre sta eseguendo un’operazione come un’operazione MFC (una transazione di memoria) porterà a risultati disastrosi.

Quindi, invece di arrestare istantaneamente tutti i thread SPU nel gruppo, quando ogni thread SPU raggiunge sys_spu_thread_group_exit, RPCS3 imposta la variabile di stato su “cpu_flag::stop” per dire al thread di fermarsi.

L’emulatore imposta anche lo stato del gruppo SPU su SPU_TGJSF_GROUP_EXIT. Quando sys_spu_thread_group_join vede lo stato modificato in SPU_TGJSF_GROUP_EXIT, la funzione finirà e il gioco continuerà.

Per la maggior parte, questo ha funzionato bene in quanto i thread SPU sarebbero terminati e il gioco avrebbe continuato a girare.

Ma a volte, alcuni giochi chiamano immediatamente sys_spu_thread_group_start utilizzando nuovamente il gruppo SPU che è stato appena “fermato”, sys_spu_thread_group_start eliminerebbe quindi il flag “cpu_flag::stop” e i thread verrebbero riavviati.

Questo ha funzionato bene fino a quando tutti i thread SPU sono stati effettivamente fermati quando il gruppo è stato riutilizzato.

Se alcuni thread SPU erano ancora in fase di esecuzione, non sarebbero stati riavviati e non potrebbero fare nulla dopo il completamento della loro operazione iniziale.

Questo è ovviamente indesiderato poiché alcuni thread SPU potrebbero avviare un’istruzione in attesa (come un loop) su se stesso e non fare mai nulla mentre altri thread SPU sono in attesa su di essi causando il blocco del gioco.

Una volta identificata la radice del problema, GalCiv ha semplicemente implementato un controllo per assicurarsi che tutti i thread SPU abbiano effettivamente smesso di funzionare in sys_spu_thread_group_join prima di riutilizzare il gruppo SPU.

Questo ha risolto la regressione in Catherine, Naruto Shippuden: Ultimate Ninja Storm 2, Devil May Cry 4 e molti altri titoli che hanno reso questi giochi ancora giocabili sulle CPU 4C4T.

Giochi

Skate

Il primo capitolo del tanto amato franchise Skate è ora completamente giocabile grazie ai miglioramenti di eladash! Ora puoi provare questo classico nella gloriosa risoluzione 4K.

Un utente dal nostro server discord, Jotain, ha giocato questo gioco dall’inizio alla fine su RPCS3 senza grossi problemi. Guarda il nostro video di gameplay qui sotto:

Gran Turismo (serie)

Gli appassionati di corse saranno felici! Grazie ai miglioramenti di eladash di questo mese, due esclusive per PlayStation 3 della serie Gran Turismo entrano in gioco, Gran Turismo 5 e Gran Turismo 5 Prologue.

Entrambi i titoli hanno ottenuto prestazioni decenti anche su CPU di fascia media. I giochi tuttavia presentano ancora problemi grafici e una visualizzazione errata del testo che impedisce loro di essere riproducibili. Guarda il filmato di gioco di Gran Turismo 5:

Gran Turismo 5 Prologue soffre invece di un insieme unico di problemi grafici.

L’impostazione della risoluzione di base su 720p ci offre una grafica pulita ma occupa solo una porzione dello schermo (immagine a sinistra) mentre l’impostazione della risoluzione di base a 1080p ci dà una tonalità stroboscopica durante la gara (immagine a destra).

Tuttavia, le correzioni per la maggior parte dei problemi che riguardano questi giochi sono già in corso.

College Hoops 2K8

Questo mese ha visto molti titoli sportivi avanzare e persino diventare giocabili. Tra questi c’è l’esclusivo College Hoops 2K8 della console che ora è giocabile anche su CPU di fascia media! I fan che hanno perso questo titolo su PC ora possono giocare con la risoluzione 4K completa.

Major League Baseball (serie)

Questo mese sono stati apportati miglioramenti sia alla serie Major League Baseball, sia all’esclusiva PlayStation MLB: The Show series e alla console esclusiva Major League Baseball 2K#.

Quattro titoli di MLB: The Show (13 – 16) e due titoli della Major League Baseball (2K7 e 2K8) sono andati in gioco per la prima volta questo mese!

Tuttavia, i giochi soffrono ancora di prestazioni ridotte e di alcuni problemi grafici che li rendono riproducibili.

Clash of the Titans

Clash of the Titans è un altro titolo che è diventato giocabile questo mese. In precedenza, il gioco si bloccava dopo i menu quando si tentava di iniziare una nuova partita.

Grazie ai miglioramenti di precisione apportati questo mese, questo titolo è passato direttamente da Intro alla categoria Playable!

Fight Night (serie)

Per concludere i titoli di questo mese, i restanti due giochi della serie Fight Night, Fight Night Champion e Fight Night Round 4 ora vanno ingame! Tuttavia, entrambi i titoli soffrono di audio molto rotto e non sono ancora considerati giocabili.

Gundam Breaker 2

La serie Gundam ha visto miglioramenti costanti negli ultimi mesi e questo mese non fa eccezione. Grazie alle correzioni di eladash, Gundam Breaker 2 sta ora progredendo in Ingame con frame rate e gameplay stabili.

Tuttavia, alcuni utenti hanno segnalato che il gioco soffre di corruzioni minori di texture e arresti anomali che impediscono di essere riproducibili. Guarda i filmati di gioco qui sotto:

Marvel vs. Capcom: Origins

Per i fan del passato, Marvel vs. Capcom: Origins è ora giocabile! Assicurati di abilitare la modalità di rendering rigoroso per visualizzare correttamente alcune texture.

Fatal Inertia EX

Un altro titolo esclusivo della console, Fatal Inertia EX è entrato nella categoria Playable questo mese.

Little League World Series Baseball 2010

Per concludere i titoli sportivi di questo mese, la Little League World Series Baseball 2010 è stata testata questo mese e si è rivelata completamente giocabile su RPCS3.

Quantum Theory

Mentre Quantum Theory è tornata a settembre, le sue prestazioni sono migliorate significativamente questo mese. Il gioco ora ha buone prestazioni di grafica, ma sono necessari ulteriori test per accertare se il gioco è effettivamente giocabile. Nel frattempo, controlla lo stato attuale del gameplay di questo titolo su RPCS3:

Fuse

Infine, abbiamo l’esclusivo Fuse su console sviluppato da Insomniac Studios per la prima volta. Anche se non ci sono grossi problemi grafici, il gioco soffre di prestazioni ridotte e tutti i modelli di personaggi sono bloccati in una T-posa, mantenendo questo titolo non riproducibile su RPCS3.

Altri miglioramenti

Ci sono state numerose altre richieste di pull unite nel corso del mese che non sono riuscite a passare alla sezione Major Improvements.

Abbiamo raccolto un elenco di tutti gli altri miglioramenti qui, e allegato una breve panoramica a ciascuno. Assicurati di controllare i link forniti se sei interessato, dato che le loro pagine GitHub di solito rivelano ulteriori dettagli e le stesse modifiche al codice.

Per vedere tutta questa lista su GitHub, clicca qui.

Prossimamente

Come avrete già visto dal video RPCS3 Improvements, l’interfaccia grafica (GUI) della PlayStation 3 nota come XMB ha iniziato a funzionare in build WIP da Ruipin questo mese!

Ciò non sarebbe stato possibile senza i precedenti lavori dell’anno di Jarves e Farseer. Insieme hanno iniziato a provare a creare una build che potesse essere avviata nel menu XMB.

Tuttavia, c’è molto da fare per renderlo possibile perché mentre la XMB è solo un’interfaccia, è costruito sulla shell della PS3 nota come VSH, e come tale, richiede un’accurata emulazione del VSH per poterlo avviare.

Gli sviluppatori erano davvero interessati a far funzionare la XMB perché ci permetteva di eseguire la LLE (Low Level Emulation) di alcuni moduli firmware che avevamo precedentemente usato per HLE (High Level Emulation).

Ad esempio il nostro modulo HLE trofeo non è perfetto e rompe alcuni giochi, ma se potessimo utilizzare la LLE il modulo sarebbe emulato con precisione perfetta. Avanziamo di qualche mese e Juhn (uno dei nostri contributori) lo raccolse, lo ridecise e ripulì il codice.

Qualche giorno dopo Ruipin si è interessato anche alla XMB e ha apportato alcune modifiche per permetterci di avere un solo file scaricato dalla PS3 invece di un’intera immagine HDD.

Se dovessi scaricare questa build, tutto quello che ti servirà per scaricare dalla tua PS3 è un file xRegistry.sys.

Allo stato attuale, l’audio non funziona, non è possibile avviare i giochi dalla XMB e il networking è limitato alle app che non controllano la connettività come il browser web. Nel complesso richiede ancora molto lavoro prima che possa essere unito alle principali build di RPCS3.

Parole di chiusura

Questo riassume il nostro rapporto di novembre. Se ti piacciono le relazioni tecniche approfondite, l’accesso anticipato alle informazioni o semplicemente vuoi contribuire, considera di diventare un mecenate!

Tutte le donazioni sono molto apprezzate. RPCS3 ora ha due codificatori a tempo pieno che beneficiano enormemente del supporto continuo di oltre 800 generosi clienti.

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.

LASCIA UN COMMENTO

Per favore inserisci il tuo commento!
Per favore inserisci il tuo nome qui

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.