Home Microsoft Disponibili i nuovi report del mese di gennaio sui progressi raggiunti dall’emulatore...

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

543
0

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

Questo nuovo aggiornamento apporta una serie di miglioramenti significativi nei componenti principali dell’emulatore RPCS3, come l’introduzione della compilazione cache multithreaded per il compilatore SPU LLVM, la reimplementazione della gestione del framebuffer grafico, la revisione del backend audio e molto altro ancora.

Alcuni utenti e moderatori interni al progetto hanno unito gli sforzi per provare ad eseguire tutti i titoli che non sono stati testati di recente.

I risultati ottenuti hanno fornito una serie di statistiche sulla compatibilità che hanno portato ad una grande diminuzione nelle categorie Intro e Loadable e un corrispondente aumento nelle categorie Playable e Ingame.

Principali miglioramenti

Compilazione multithreaded SPU LLVM (#5586)

Nel mese di gennaio, Nekotekina ha implementato la compilazione della cache SPU multithread durante l’avvio e il runtime. Questo ha migliorato notevolmente i tempi di avvio quando si utilizza il compilatore SPU LLVM, in particolare per le CPU con numero di core/thread elevato.

In Red Dead Redemption, un titolo noto per avere un numero eccessivo di programmi SPU, il tempo di compilazione di circa 75.000 oggetti su di un Ryzen R7 1700 @3.9GHz è passato da 12 minuti e 25 secondi a solo 1 minuto e 34 secondi!

Gli utenti possono aspettarsi tempi di avvio molto più rapidi ora quando si utilizza il compilatore SPU LLVM, che in precedenza era un grosso problema con il compilatore sperimentale.

Questo miglioramento dovrebbe anche avvantaggiare il compilatore ASMJIT SPU, anche se i miglioramenti si manifesterebbero come un framerate più stabile rispetto a un aumento di FPS.

Nekotekina ha migliorato la logica adiacente come per la SPU ubertrampoline e il refactoring della classe spu_runtime per implementare questa caratteristica.

La SPU ubertrampoline è una semplice primitiva che esegue una ricerca binaria su più candidati al programma per selezionare quello giusto senza sapere quale viene caricato in memoria.

Mentre l’output viene generato in modo efficace, anche con il compilatore SPU ASMJIT l’output non viene semplicemente generato abbastanza velocemente da soddisfare le esigenze di RPCS3.

Nekotekina ha quindi implementato la generazione della SPU ubertrampoline. Inoltre, la spu_runtime è stata ricostruita in una classe comune che unifica il codice utilizzato per entrambi i ricompilatori ASMJIT e LLVM in questo senso.

Miglioramenti FBO (#5427#5565)

Nel dicembre del 2018, kd-11 aveva mirato a unire due importanti modifiche all’emulazione RSX. Il primo è un miglioramento nella gestione degli oggetti framebuffer (FBO) e il secondo è un miglioramento delle doppie di assegnazioni, l’esecuzione condizionale e gli input degli shader che sono stati soprannominati GT Fix dopo la serie principale che ne ha tratto beneficio.

Questo mese esamineremo i miglioramenti dell’FBO che consistono in molti miglioramenti, i due principali componenti sono la rimozione di allegati nel framebuffer non necessari per allegati che sono probabilmente inutilizzati e la riscrittura di trasferimenti di ereditarietà della memoria.

Il primo miglioramento ha riorganizzato la gestione degli oggetti nel framebuffer per evitare di toccare la memoria (una tecnica usata per monitorare a basso costo l’utilizzo della memoria) se un comando è stato impostato in modo tale che i dati non sarebbero cambiati.

Questo consente all’emulatore RPCS3 di evitare la generazione di allegati nel framebuffer per quegli allegati che risultano probabilmente inutilizzati e impedisce il danneggiamento della memoria quando non si utilizzano i buffer di colore Write/Write Depth Buff poiché si affidano ai tag di memoria degli allegati per controllare gli eventi.

In precedenza, queste corruzioni influivano su diversi giochi come Skate 3, in cui le prestazioni si abbassavano anormalmente al di sotto di 1 FPS durante l’ingame e l’arresto anomalo dell’emulatore quando si entrava nella schermata di modifica skater.

Poco dopo, kd-11 ha riscritto i trasferimenti di ereditarietà della memoria per garantire implicitamente risultati corretti anche quando la modalità di rendering rigorosa è stata disattivata invocando una barriera di memoria durante la lettura attiva da una trama non sincronizzata.

Questa soluzione ha semplificato le operazioni di trasferimento della memoria e ha consentito a molti giochi che attualmente richiedono la modalità di rendering rigoroso di visualizzare grafica accurata senza l’opzione abilitata.

Altri notevoli miglioramenti sono stati la correzione del deadlock della cache delle texture dovuta a un calcolo errato delle dimensioni interne e un aumento del numero massimo di invocazioni di calcolo quando si utilizzava il renderer Vulkan da 120 a 1024.

Questo era il risultato del benchmark manuale di vari giochi dimostrando che è completamente possibile attivare un numero molto elevato di operazioni di lettura durante le schermate di caricamento.

Per quelli di voi che si chiedono perché questa richiesta di pull non sia stata incorporata a dicembre 2018, come parte del piano originale di kd-11, i miglioramenti dell’FBO sono previsti per precedere GT Fixes.

Tuttavia, anche se questi cambiamenti hanno risolto una serie di problemi in una pletora di giochi, ha anche causato un gran numero di giochi alla regressione in diversi modi, facendo sì che kd-11 intraprendesse un’analisi più approfondita di ciò che era inizialmente previsto.

La causa principale di queste regressioni era dovuta all’elevato numero di permutazioni possibili nella configurazione del framebuffer.

Ciò ha comportato oltre 20 giorni di andata e ritorno tra kd-11 e la nostra comunità di tester che si snodava in un ciclo di segnalazioni e attacchi di schiacciamento.

Grazie al continuo test di quasi tutti i giochi e alla resilienza di kd-11 per risolvere tutti i problemi segnalati, i miglioramenti dell’FBO sono diventati la richiesta pull più commentata nella storia dell’emulatore RPCS3!

Tuttavia, tutti gli sforzi sono stati ripagati con una pletora di giochi che hanno beneficiato di una grafica migliorata o di crash risolti. MotorStorm e MotorStorm Pacific Rift/3D Rift non si schiantano più frequentemente, Tekken Tag Tournament 2 mostra colori precisi sugli abiti, Midnight Club: Los Angeles ora visualizza correttamente gli effetti della pioggia, Saints Row IV ora mostra grafica quando si usa il renderer OpenGL, Ratchet & Clank: QForce non è più affetto dall’effetto ghosting, Saint Seiya: Brave Soldiers ha un buffer di profondità fisso e molto altro.

Mentre le immagini sottostanti sono una piccola selezione di miglioramenti, guarda i video dei miglioramenti collegati sopra per vedere i miglioramenti in molti altri titoli!

kd-11 ha rapidamente iniziato a lavorare anche su di una richiesta di follow-up con varie correzioni per i problemi identificati dai miglioramenti dell’FBO.

Queste correzioni includevano la riscrittura degli offset della base del buffer dell’indice per preservare l’uso dei buffer dell’indice u16 per coerenza e riduzione dell’impronta di memoria, un’inversione parziale delle modifiche apportate ai miglioramenti dell’FBO che influiscono sulla compilazione degli shader asincroni, inversione del colore rosso-blu quando si utilizza il Renderer OpenGL, evitando un potenziale deadlock nel controllo FIFO RSX, migliorando la trasparenza da alfa a copertura con una tecnica di approssimazione migliore e riscrivendo la logica del divisore degli attributi del vertex.

Queste modifiche hanno riguardato vari componenti dell’emulazione RSX e la sinergia risultante è stata un ulteriore miglioramento del rendering grafico e dell’accuratezza del colore.

Midnight Club: Los Angeles ha visto anche il rendering delle ombre degli alberi per la prima volta e un miglioramento del fogliame, mentre i giochi MotorStorm ora mostrano accuratamente le tracce dei pneumatici.

Miglioramenti del buffer audio e del backend (#5456)

RPCS3 presenta il supporto ufficiale per 4 backend audio. Su Windows, XAudio2 è disponibile mentre ALSA e PulseAudio sono disponibili su Linux. Infine, OpenAL è un backend audio multipiattaforma che funziona su entrambi i sistemi operativi.

Mentre i primi tre backend hanno visto miglioramenti straordinari, il back-end OpenAL è stato ampiamente ignorato e di conseguenza è stato deprecato in una categoria Do Not Use (molto simile a DirectX 12).

Uno dei nostri collaboratori, ruipin, ha valutato l’attuale configurazione audio e le varie problematiche che lo affliggono e ha deciso di intraprendere un refactoring su larga scala di come l’audio viene gestito dall’emulatore RPCS3.

I problemi relativi all’audio rappresentavano sempre una sfida per il debug dato che molti problemi affrontati dagli utenti erano il risultato di risorse insufficienti della CPU.

Poiché i thread relativi a RSX, SPU e PPU hanno priorità più alta, i thread audio vengono ritardati durante i colli di bottiglia che portano al crepitio o alla completa perdita di suono.

Quindi, nei casi in cui i giochi non potevano colpire il valore FPS come bersaglio, i problemi audio erano prevalenti anche quando il gameplay era tollerabile.

Tuttavia, titoli come NieR presentavano audio stuttery anche quando giravano a piena velocità su un i9 9900K. Ciò ha rivelato un problema più profondo dei giochi che non erano in grado di fornire l’audio in modo tempestivo, anche quando erano disponibili risorse hardware sufficienti.

La PlayStation 3 fornisce audio a intervalli fissi di 5,3 millisecondi, ma a causa di vari fattori, i giochi potrebbero richiedere più tempo di tanto in tanto, causando crepitii e balbuzie evidenti.

Per risolvere questi problemi, ruipin ha implementato due nuove funzionalità, buffering audio e periodo audio dinamico. Queste caratteristiche insieme mirano ad evitare la balbuzie intermittente nei giochi e fornisce agli utenti un gameplay più fluido.

Il buffering audio è piuttosto diretto con l’audio che viene memorizzato in memoria e riprodotto con un ritardo configurabile (il valore predefinito è di 100 millisecondi).

Tuttavia, il periodo dell’audio dinamico è dove la magia accade davvero. Abilitato, se la logica audio rileva che il gioco è in ritardo nel mixaggio dell’audio, aumenterà in modo dinamico il periodo dell’audio per dare al gioco un po’ di tempo in più.

D’altra parte, se il gioco sembra avere l’audio pronto prima del necessario, la logica audio ridurrà dinamicamente il periodo audio per mantenere la durata media del buffer audio e di conseguenza garantire la sincronizzazione.

Questo può continuare con (quasi) senza balbuzie finché il buffer non si esaurisce. La clip seguente mostra i vantaggi di queste modifiche:

Tuttavia, ruipin ha fatto un ulteriore passo in avanti e ha introdotto anche un algoritmo per il time stretching che può essere usato per appianare i crepitii o la balbuzie se il livello di riempimento del buffer sta cadendo pericolosamente in basso.

Questo ha lo scopo di attenuare la balbuzie rara causata da qualsiasi situazione, ad esempio un’attività di sfondo che si avvia o una schermata di caricamento che utilizza più risorse della CPU.

Tuttavia, con questo algoritmo non vi è alcuna correzione del passo e quindi se un gioco ha costantemente problemi nel mantenimento di un buffer audio completo (comune su CPU con basso thread count), questa opzione causerà un’enorme riduzione della qualità audio. Per questo motivo, questa opzione è disabilitata per impostazione predefinita.

D’altra parte, il buffering dell’audio e il periodo dell’audio dinamico non hanno questi svantaggi e sono abilitati di default (su Windows) per tutti gli utenti.

Tuttavia, queste modifiche non sono pensate per essere una soluzione completa per risolvere magicamente l’audio nei giochi che non funzionano alla massima velocità. La CPU deve essere abbastanza veloce da pilotare un buffer audio completo ogni 5,3 millisecondi (in media).

Oltre a queste caratteristiche, il backend OpenAL è stato anche riproposto e portato agli stessi livelli di qualità del backend XAudio2.

Anche l’intero thread cellAudio è stato ampiamente refactorato per facilitare la manutenzione e il miglioramento in futuro. Tutti i backend audio ora espongono automaticamente un elenco di funzionalità in modo che l’algoritmo cellAudio possa decidere come guidare l’audio in base a ciò che è supportato.

Mentre il buffering audio è abilitato di default sui backend XAudio2 e OpenAL (con una durata del buffer di 100 millisecondi), PulseAudio e ALSA attualmente non supportano queste nuove funzionalità.

Poiché il back-end ALSA è l’opzione predefinita su Linux, gli utenti devono abilitare il back-end OpenAL per sfruttare queste nuove funzionalità.

Infine, Megamouse è entrato in gioco e ha aggiunto tutte le opzioni pertinenti alla GUI per le funzionalità sopra menzionate. Puoi trovare queste opzioni nella scheda Audio del menu Impostazioni.

Miglioramenti nella finestra di dialogo del gioco e dell’interfaccia utente nativa (#5465, #5497, #5536, #5537, #5566)

Nel mese di gennaio, kd-11 ha annunciato che avrebbe implementato una tastiera a schermo (OSK) direttamente nell’interfaccia utente nativa per consentire agli utenti di immettere testo utilizzando il controller stesso senza dover utilizzare una tastiera reale.

Tuttavia, ci sono stati una serie di problemi con la finestra di dialogo Qt OSK esistente e l’interfaccia utente nativa che rappresentava una sfida all’implementazione della tastiera nativa su schermo.

Fortunatamente, il nostro sviluppatore Quality-of-Life, Megamouse, ha deciso di risolvere questi problemi per consentire una perfetta integrazione dell’implementazione OSK nativa di kd-11.

La prima serie di miglioramenti ha mirato a bug in vari sistemi di dialogo in RPCS3 (Qt e Native UI):

  • Una regressione rispetto ai miglioramenti apportati alla configurazione del controller di dicembre, che a volte bloccava i giochi su cui erano state risolte le interfacce Native UI di apertura o chiusura.
  • Successivamente, titoli come Diablo 3 hanno assunto che la finestra di dialogo sia stata accettata, anche quando è stata effettivamente cancellata. Per risolvere questo problema, Megamouse ha eseguito il test su PlayStation 3 per determinare in che modo l’hardware originale ha gestito le cancellazioni e implementato con la stessa precisione in RPCS3.
  • Dopo questo, c’era un problema in cui il gioco continuava a riconoscere l’input dal controller anche quando la finestra di dialogo di inserimento del testo era aperta. Con l’implementazione Qt, questo non costituiva un grosso problema in quanto tutto il testo veniva alimentato con una tastiera mentre l’input per il gioco veniva dato con un controller. Ma una volta implementato l’OSK nativo, i giochi che riconoscono in modo errato l’input destinato all’OSK causano problemi indesiderati agli utenti. Per risolvere questo problema, è stata implementata un’intercettazione di input della finestra di dialogo appropriata per scartare qualsiasi input apportato al gioco mentre è attiva una finestra di dialogo di sistema.
  • Implementato un controllo mancante per le stringhe vuote che ha corretto un crash quando gli utenti hanno provato a confermare una finestra di dialogo di input senza immettere alcun testo. Alcuni giochi come Diablo 3 ora useranno questo controllo per identificare se la stringa è vuota e avvisa l’utente di conseguenza dopo aver chiuso la finestra di dialogo.
  • Infine, sono state aggiunte poche costanti e controlli per migliorare la precisione di emulazione.

In precedenza, Godzilla si bloccava dopo la finestra di dialogo di conferma della lingua, ma grazie ai miglioramenti apportati, questo titolo va di nuovo Ingame!

I miglioramenti riportati poco sopra hanno corretto diversi problemi che riguardavano più titoli come Lair, South Park: The Stick of Truth, Sengoku Basara 4, Diablo 3 e Godzilla. Tuttavia, un numero di altri titoli come Skate 3 e NieR hanno iniziato a bloccarsi inaspettatamente durante l’interazione con i dialoghi di gioco.

Indagando su queste regressioni, Megamouse ha scoperto che questi problemi non erano una vera regressione, ma erano in effetti varie caratteristiche non implementate che sono state portate alla ribalta grazie alla migliore accuratezza del sistema di dialogo dei messaggi.

Una volta bloccate queste permutazioni mancanti, le funzionalità necessarie per affrontare le “regressioni” sono state implementate in modo sommario.

Implementato il supporto per la visualizzazione del messaggio del gioco nella finestra di dialogo Qt OSK (e nella futura interfaccia OSK).

Per semplificare il debug e facilitare ulteriori miglioramenti, Megamouse ha migliorato anche la registrazione del codice di errore per tutte le finestre di dialogo del sistema e separato dal codice della finestra OSK esistente nella propria classe. Questo contribuirà anche alla corretta implementazione della tastiera sullo schermo dall’interfaccia utente nativa.

Infine, l’implementazione HLE della finestra di dialogo OSK è stata migliorata reimplementando i controlli di stato (aperti, chiusi, interrotti) e assicurandosi che i dati non vengano scritti nella memoria non allocata mentre si passa l’input dell’utente al buffer del gioco.

Questo è stato un problema di lunga data che è stato finalmente affrontato con problemi in titoli come Class of Heroes 2G.

Giochi

Skate 3

Il terzo capitolo della serie Skate, Skate 3, è ora completamente giocabile! Questo titolo ha sofferto in precedenza di gravi rallentamenti nella modalità skate gratuita ma, grazie ai miglioramenti apportati da kd-11 alla gestione del framebuffer, questo problema ora è stato risolto.

Dragon Ball Z: Battle of Z

Uno degli ultimi titoli della serie Dragon Ball, Dragon Ball Z: Battle of Z ora è diventato giocabile! Questo titolo ha beneficiato dei miglioramenti della gestione dei framebuffer di kd-11 che hanno risolto una regressione che ha causato il crash del gioco nella schermata del titolo.

Ni no Kuni: Wrath of the White Witch

Ni no Kuni: Wrath of the White Witch ora è completamente riproducibile su RPCS3 con un buon framerate anche su sistemi mid-range grazie ai recenti miglioramenti di Nekotekina ed Eladash.

Mentre Ni no Kuni ha funzionato bene su sistemi performanti per un lungo periodo, i recenti miglioramenti grafici, prestazionali e di stabilità hanno finalmente spinto oltre la linea della categoria giocabile.

No More Heroes: Heroes’ Paradise

Mentre questo titolo esclusivo della console aveva buone prestazioni e grafica, soffriva di un bug che impediva agli utenti di salvare i loro progressi.

Grazie ai recenti miglioramenti per il salvataggio della gestione dei dati in RPCS3, questo problema è stato corretto e ora No More Heroes: Heroes’ Paradise è completamente riproducibile!

Un utente del nostro forum, MilkManEX, è riuscito a terminare il gioco dall’inizio alla fine su RPCS3 senza grossi problemi.

Onechambara Z: Kagura with NoNoNo!

Questo mese, Onechambara Z: Kagura with NoNoNo! è progredito! Mentre il gioco ha prestazioni e grafica stabili, subisce crash durante le battaglie con i boss, impedendo che sia giocabile.

EX. Troopers

Come consuetudine, ecco un altro titolo weeb school/mecha/action/shooter che ora è completamente riproducibile su RPCS3.

Ragnarok Odyssey Ace

Questo JRPG in precedenza soffriva di significativi problemi grafici che lo impedivano di essere riproducibili. Tuttavia, con i recenti miglioramenti dell’emulazione RSX, questi problemi sono stati risolti permettendo a questo titolo di essere completamente riproducibile.

WWE All Stars

Questo spin-off WWE acclamato dalla critica è ora completamente giocabile! Precedentemente questo titolo si sarebbe bloccato sulla schermata di caricamento prima di andare Ingame. Con i recenti miglioramenti di stabilità questi problemi sono stati risolti.

Absolute Supercars e titoli Ferrari

Grazie ai miglioramenti del tipo di base vertex di RSX eladash, diversi titoli di corse della Eutechnyx studio (come Absolute Supercars, Ferrari Challenge: Trofeo Pirelli e Ferrari: The Race Experience) sono entrati Ingame per la prima volta questo mese.

Tuttavia, questi titoli presentano ancora alcuni problemi grafici e prestazioni ridotte che ne impediscono la corretta riproduzione.

Elevator Action Deluxe

Grazie ai miglioramenti di kd-11, l’ultimo bug rimasto riguardante l’HUD è stato corretto, permettendo al gioco di essere completamente riproducibile ora!

Vampire Rain: Altered Species

Grazie ai recenti miglioramenti di stabilità apportati all’emulatore, questo titolo di survival horror è passato da Loadable a Ingame!

Altri miglioramenti

Ci sono state numerose altre richieste di pull 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 stess0. 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

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.