Home Mobile Android Online l’ultimo report di quest’anno per l’emulatore Yuzu

Online l’ultimo report di quest’anno per l’emulatore Yuzu

607
0

Siamo giunti all’ultimo report dell’anno sui progressi raggiunti dall’emulatore Yuzu, progressi che hanno portato a molte correzioni della GPU, seguite a breve da correzioni dei driver, modifiche significative ad Android/ARM, più lavoro sugli applet, nuovi progetti di input e molto altro.

Il mese di Novembre ha visto il lancio di un grande e iconico classico, Super Mario RPG, titolo che vanta una grafica migliorata per affascinare sia i fan fedeli che i nuovi giocatori.

https://twitter.com/yuzuemu/status/1736872040836313339

La compatibilità del gioco con l’emulatore Yuzu è stata oggetto di grande interesse al momento del rilascio, suscitando la domanda: “Funziona su yuzu?” La risposta affermativa è giunta con una nota di cautela, come consuetudine.

Per ottimizzare le prestazioni di questo vibrante cast, sono state necessarie due risoluzioni chiave: un problema audio generale che coinvolgeva tutti gli utenti e una soluzione specifica per chi utilizza grafica NVIDIA.

Un ostacolo evidente è emerso quando gli utenti hanno notato l’assenza completa dell’audio di sottofondo, riducendo significativamente la qualità immersiva dell’esperienza di gioco.

Dopo un’attenta esaminazione, è emerso che il problema derivava da un residuo della riscrittura Opus effettuata da Maide a settembre. Una volta risolto questo particolare problema, il gioco ha ripristinato senza intoppi la funzionalità audio.

Contemporaneamente, epicboy si è impegnato in un’indagine separata nel ricompilatore di shader, affrontando le sfide di rendering legate all’architettura NVIDIA.

Per coloro che non hanno familiarità con le complessità della pipeline di shader di Yuzu e della tecnologia di emulazione:

I giochi sono dotati di shader ottimizzati per l’architettura della console di destinazione, come ad esempio lo Switch.

Poiché questi shader non sono compatibili con altri dispositivi, l’emulatore deve intercettarli e convertirli durante l’esecuzione in un formato compatibile con l’API grafica selezionata (SPIR-V, GLSL e GLASM nel caso di yuzu).

Solo allora questi shader convertiti possono essere trasmessi al driver della GPU per il rendering. Il processo di conversione multistep trasforma uno shader Switch in un formato adatto, ad esempio, per Ampere, Adreno o RDNA3.

I driver NVIDIA incorporano ottimizzazioni per vari modelli di codice shader. Quando si verifica un bug in queste ottimizzazioni, possono verificarsi anomalie indipendentemente dalle impostazioni, dall’API o dal backend dello shader utilizzato.

In questo caso, il problema si è manifestato con distorsioni dei colori dei personaggi nei menu a causa dell’avversione dei driver NVIDIA al particolare modello utilizzato dagli shader del gioco. A differenza dei bug tipici dei driver, questa anomalia ha colpito ogni backend.

L’intervento di epicboy ha comportato l’identificazione di questo modello all’interno di Yuzu, affrontandolo preventivamente prima della trasmissione al driver mediante la sostituzione della linea problematica con un’operazione di OR bit a bit.

Questo adattamento ha soddisfatto il compilatore NVIDIA, garantendo una rappresentazione accurata dei colori per gli sprite dei personaggi e risolvendo universalmente il problema.

Project NiCE

Project NiCE rappresenta un significativo passo avanti nel mondo degli emulatori Android, segnando il passaggio da un emulatore PC compatibile con Android a un emulatore Android “nativo”.

L’implementazione del supporto NCE (Native Code Execution), frutto di un imponente sforzo da parte di GPUCode e byte[], ha permesso di adattare la capacità di eseguire il codice di gioco nativamente sui dispositivi ARM, senza la necessità di un ricompilatore che rallenti le prestazioni.

Questo approccio, sebbene promettente sulla carta, si traduce in vantaggi tangibili per gli utenti. Rispetto all’utilizzo di un ricompilatore JIT, che garantisce la compatibilità indipendentemente dal dispositivo in uso.

L’utilizzo di NCE offre un incremento delle prestazioni proporzionale alla potenza e alla capacità termica disponibili sul dispositivo dell’utente, mentre consente di risparmiare anche fino a 128 MB di memoria per ogni core CPU virtuale (quattro nel caso di Switch), portando a un risparmio complessivo di 512 MB di RAM mediante l’eliminazione del ricompilatore JIT.

La presenza di un sistema di raffreddamento attivo sul dispositivo continua a produrre i migliori risultati, ma con NCE, si registrano prestazioni superiori, maggiore durata della batteria, minor rilascio di calore e tempi di caricamento dei giochi più rapidi.

A questi viene aggiunto anche un aumento dei frame per secondo, solitamente compreso tra il 20% e il 100%, a seconda del gioco e del dispositivo utilizzato.

Tuttavia, come spesso accade, non tutto è perfetto e vi sono alcune “limitazioni applicabili”. Non tutti i giochi possono beneficiare dell’NCE.

Alcuni giochi iniziali per Switch richiedono l’installazione degli aggiornamenti per poter essere eseguiti con NCE, a causa di limitazioni nel kernel Linux e dei requisiti per funzionare in uno spazio di indirizzi di memoria molto limitato.

Le limitazioni includono giochi a 32 bit, come Mario Kart 8 Deluxe e Captain Toad: Treasure Tracker, che non funzionano con NCE, con l’emulatore che deve ricorrere automaticamente al ricompilatore JIT Dynarmic.

Ci sono anche casi in cui alcuni giochi si rifiutano di funzionare con NCE a causa della minore permissività di Linux rispetto al sistema operativo della Switch.

Da notare che queste limitazioni si applicano sia ai dispositivi Android che ad altri dispositivi ARM, come schede Linux ARM o laptop.

NCE è abilitato per impostazione predefinita nelle versioni più recenti disponibili su GitHub e sul Play Store. L’opzione può essere trovata in Impostazioni > Impostazioni avanzate > Debug > Backend CPU.

Per gli utenti più esperti, è consigliabile non disabilitare Fastmem, poiché ciò comporterebbe anche la disabilitazione dell’NCE.

Alcune immagini di giochi con Fastmem disabilitato ma che mostrano comunque NCE sotto il contatore dei frame sono state corrette con un’apposita patch.

Ancora cambiamenti per Android

Su Android sono state apportate anche altre modifiche significative non strettamente legate all’NCE da parte di byte[] e t895, come un contatore FPS con testo bianco, lettura continuamente aggiornata e indicazione del backend CPU in uso (JIT o NCE).

Il contatore FPS può essere attivato trascinando dal lato sinistro durante l’esecuzione di un gioco e selezionando Opzioni sovrapposte > Contatore FPS.

t895 ha apportato miglioramenti sostanziali alla scheda Impostazioni, con l’aggiunta di icone e descrizioni, nonché la modifica dell’ordine degli elementi e della posizione di alcune impostazioni.

La scheda Impostazioni e la pagina Informazioni sono state adattate per includere una disposizione orizzontale, a cura di t895, migliorando l’usabilità su tablet, dispositivi pieghevoli e altri dispositivi di grandi dimensioni.

Sono state apportate ulteriori ottimizzazioni al contatore FPS, inclusa l’aggiunta di un’ombra per migliorarne la leggibilità, e ora la dimensione del testo è controllata dallo stile del carattere del dispositivo.

Per migliorare la stabilità, t895 ha disabilitato la funzione Picture-in-Picture durante l’avvio o lo spegnimento.

Blinkhawk ha inoltre disabilitato la sincronizzazione della scrittura su dispositivi Android con driver Turnip, risolvendo i crash in giochi come Red Dead Redemption e Luigi’s Mansion 3.

In risposta a una decisione democratica degli utenti, t895 ha disabilitato Picture-in-Picture per impostazione predefinita.

Blinkhawk ha riabilitato l’utilizzo della compilazione in pipeline multithreaded per Android, riducendo lo stuttering durante il caricamento della cache all’avvio e la creazione di nuovi shader durante il gioco, grazie al minor consumo di risorse sotto NCE.

byte[] ha individuato un’altra causa di crash su GPU Mali: la mancanza di supporto per il rendering multi-viewport. Disabilitare questa funzione migliora notevolmente la stabilità su dispositivi con GPU Mali.

Il limite superiore di velocità è stato aumentato al 400%, poiché t895 ha scoperto che utilizzare un limite elevato è più stabile rispetto alla sua disabilitazione completa.

Alcune limitazioni legate a GPU Mali sono state risolte da byte[], consentendo il corretto funzionamento di Super Smash Bros. Ultimate su tali dispositivi.

Inoltre, byte[] ha risolto un caso limite nella cache delle query che causava crash su driver Turnip.

Grazie ai report degli utenti, german77 ha corretto la disposizione errata dei pulsanti faccia ABXY sui controller Redmagic.

t895 ha aggiunto il supporto nell’interfaccia utente per cartelle di giochi multiple e la possibilità di esplorare sottocartelle, offrendo maggiore flessibilità nell’organizzazione dei giochi.

Infine, dopo aver risolto problemi legati a GPU Mali e Turnip, byte[] ha affrontato le problematiche su dispositivi Qualcomm, escludendo l’estensione Vulkan di stato dinamico dell’input del vertice, risolvendo problemi di visualizzazione su GPU della serie 600.

Tale soluzione ha evidenziato la mancanza di test approfonditi da parte di Qualcomm, lasciando alla comunità il compito di affrontare le sfide rimanenti.

Modifiche grafiche

La modifica relativa alle impostazioni Force maximum clocks sembra causare confusione tra gli utenti, portando spesso all’attivazione in situazioni non appropriate, soprattutto su dispositivi con limitazioni di potenza o termiche.

Inizialmente, questa impostazione è stata concepita per risolvere un problema specifico di AMD: le loro schede basate su architettura RDNA soffrono di un notevole downclocking, o come viene definito dall’autore “sindrome cronica di downclocking”, durante l’emulazione di molti giochi.

La bassa carica GPU generato dall’emulatore spesso non viene riconosciuto come un gioco, causando la permanenza delle frequenze di clock a valori estremamente bassi e di conseguenza prestazioni molto scarse.

L’opzione Force maximum clocks su Yuzu per desktop genera un carico di calcolo fittizio per la GPU, costringendo la scheda a incrementare le frequenze di clock.

Tuttavia, l’esecuzione di un carico di calcolo del genere non è praticabile per le GPU integrate, specialmente su dispositivi mobili con raffreddamento limitato e un bilancio energetico limitato.

Abilitare questa impostazione sposta la priorità del budget energetico verso la GPU, mentre l’utente desidera eseguire un gioco emulato, solitamente fortemente limitato dalla CPU.

Questo comporta un aumento del consumo energetico e del calore, con conseguente riduzione delle prestazioni in presenza di un raffreddamento insufficiente.

Pertanto, l’uso di Force maximum clocks non è consigliato su dispositivi portatili come lo Steam Deck, computer portatili basati solo su GPU integrate con limitate capacità di raffreddamento o PC desktop con GPU integrate.

Questa impostazione comporterebbe una riduzione delle prestazioni e un aumento fastidioso del rumore della ventola, ed è pensata solo per GPU dedicate con adeguato raffreddamento. Alcune guide online potrebbero non essere a conoscenza di tali dettagli.

Per affrontare questo problema, byte[] ha ampliato la blacklist di questa impostazione includendo il recentemente rilasciato Steam Deck OLED. Poiché non vi è variazione hardware nello Steam Deck, è sicuro bloccare questa opzione.

L’utente lucasreis1, nuovo arrivato, ha risolto i problemi di crash riportati dagli utenti Linux con GPU NVIDIA che utilizzano il server display Wayland e le versioni più recenti dei driver.

La correzione consiste nell’allocare le risorse della finestra prima di richiedere informazioni di sistema, risolvendo così i crash. Gli utenti Wayland di NVIDIA possono ora eseguire i giochi senza crash.

byte[] e Maide hanno lavorato su miglioramenti delle prestazioni per la decodifica video, cercando di non dipendere esclusivamente da FFmpeg per questa attività.

Le modifiche iniziali sono state implementate, ma ulteriori lavori sono necessari prima che i risultati raggiungano l’utente finale.

Blinkhawk è riuscito a individuare e risolvere diverse regressioni che influenzavano Pokémon Scarlet/Violet introdotte dalla nuova Query Cache.

Un po’ di cattive notizie: byte[] ha dovuto disabilitare il supporto per l’estensione Vulkan depth bias, che era pensata per risolvere i problemi D24 che affliggono le schede AMD su Linux.

Gli utenti RADV (il driver Vulkan Mesa per GPU AMD su Linux) hanno notato problemi con alcune fasi in Super Smash Bros. Ultimate.

L’indagine ha rivelato che, anche con l’uso dell’estensione, è possibile risolvere alcuni giochi e romperne altri nel processo.

Fino a quando non vengono trovate alternative, è stato ripristinato l’approccio tradizionale, consentendo ai giocatori di combattere nella fase di Zelda per Nintendo 64 senza essere accecati dal riflesso.

Tornando a OpenGL, epicboy ha introdotto diverse modifiche. Inizialmente, ha implementato i download asincroni, una funzionalità precedentemente disponibile solo su Vulkan, portando a un aumento delle prestazioni dell’11% quando si utilizza la vecchia API.

Successivamente, epicboy ha risolto i problemi di rendering che interessavano Xenoblade Chronicles: Definitive Edition e Xenoblade Chronicles 3 quando si utilizzava il backend shader GLASM, che si basa pesantemente sul feedback di trasformazione per il rendering.

Continuando a migliorare le prestazioni di OpenGL, epicboy ha implementato l’uso dei comandi glBindVertexBuffers e glBindBuffersRange, rendendo obsoleta l’uso della precedente estensione GL_NV_vertex_buffer_unified_memory.

Ciò riduce il carico di chiamate API noto in OpenGL, riducendo di conseguenza l’uso della CPU.

Infine, per chiudere la sezione, epicboy ha contribuito a mitigare uno svantaggio fastidioso di OpenGL, i tempi di compilazione degli shader, ma solo quando si utilizza hardware NVIDIA.

Riducendo la dimensione del buffer costante nella dichiarazione alla dimensione effettivamente utilizzata dallo shader, si migliora la velocità di compilazione degli shader.

Non è pari a Vulkan, ma è sicuramente una aggiunta MOLTO gradita per quei casi in cui OpenGL è l’unica opzione disponibile.

Applet, input e altri servizi

Macj0rdan e german77 questo mese hanno continuano a collaborare per implementare l’applet del menu del controller. Attualmente, la funzionalità è limitata, ma ora è possibile visualizzare i controller collegati come previsto.

Come di consueto, è necessario un dump del firmware per avviare qualsiasi applet.

Sebbene questa sia un’aggiunta divertente, al momento non ci si può aspettare una grande utilità. Il lavoro di Macj0rdan e german77 continua anche sulle immagini del profilo per tutte le applet di sistema attualmente disponibili.

Ad esempio, durante la selezione del profilo, ora le immagini vengono visualizzate correttamente.

Il Nintendo Switch richiede immagini di dimensioni 256×256, quindi è stato incluso un ridimensionatore nell’implementazione per fornire all’applet ciò di cui ha bisogno.

German77, proseguendo il suo lavoro precedente sulle stranezze dell’infrarosso, ha completato l’implementazione del processore di immagini in tempo reale.

Ciò significa che ora giochi come Trombone Champ e WarioWare: Put a lid on it sono giocabili con i Joy-Con. Sentiti libero di alzare il volume e torturare i tuoi vicini quanto vuoi.

Cambiando un po’ argomento, german77 ha corretto un’omissione nel codice di input riguardante i pulsanti SL e SR del singolo Joy-Con, consentendo così di giocare a uno dei minigiochi di WarioWare: Plug your leaks.

Questo cambia la compatibilità all’indietro con i profili di input salvati dei singoli Joy-Con destri, ma questo è un caso improbabile per la maggior parte dei giochi. Se utilizzi questa configurazione, potresti dover riassegnare il tuo controller, ma gli altri profili non sono influenzati.

Grazie al lavoro del nuovo arrivato dima-xd, ora è possibile eseguire l’applet della tastiera software nativa. Purtroppo, al momento non è possibile utilizzarla nei giochi, poiché non può essere avviata su richiesta – è necessario il supporto multiprocesso per questo.

Ora che Yuzu può lavorare con i dati Mii all’interno degli Amiibo, il codice convalida automaticamente la loro integrità.

Grazie al lavoro di german77, l’emulatore ora può rilevare gli Amiibo corrotti e caricare automaticamente un backup, evitando così crash in giochi sensibili all’integrità degli Amiibo, come Super Smash Bros. Ultimate.

Macj0rdan, lavorando da solo questa volta, ha una correzione separata per noi. L’applet del controller ha iniziato a dare problemi dopo il rilascio del firmware 17.0.0.

Con il nuovo firmware, sono state implementate nuove funzioni, e in questo caso, l’implementazione di SetTouchscreenDimensions ha risolto il problema.

Inoltre, daisymlleung, un nuovo arrivato, ha gestito le chiamate di Super Bomberman R 2 che verificano gli utenti bloccati. Poiché l’emulatore al momento non memorizza queste informazioni e non ne ha alcun utilizzo, è stato sicuro marcare questa parte come stub.

Infine, per concludere questa sezione, toastUnlimited ha dovuto occuparsi di alcuni problemi con Qt. L’analisi del testo di Qt non gradiva il modo in cui erano memorizzate le stringhe frontend di Yuzu, causando la mancata visualizzazione di molte traduzioni dell’interfaccia utente.

Modifiche varie

Per agevolare gli utenti nel verificare lo stato dell’installazione del firmware, e considerando che la versione del firmware fa la differenza per le applet di sistema, german77 ha aggiunto un indicatore della versione del firmware nella barra di stato dell’interfaccia utente.

L’emulazione del mouse, insieme all’emulazione della tastiera, sono opzioni disponibili per gli utenti all’interno di Yuzu per i pochi giochi che le supportano.

Queste opzioni sono disponibili in Emulazione > Configura… > Impostazioni > Controlli > Avanzate e segnalano ai giochi che una tastiera e/o un mouse USB sono collegati alla console.

Per aiutare i giocatori con il mouse ― non intendiamo “usare il mouse come una levetta per mirare”, ma emulare un mouse USB collegato ― german77 si è assicurato che il cursore nativo effettivo del tuo sistema operativo non esca dalla finestra di yuzu.

Continuando il suo lavoro per migliorare l’emulazione del sistema di file di Yuzu, byte[] ha risolto un bug che causava il fallimento dell’avvio di MONSTER HUNTER GENERATIONS ULTIMATE quando erano installate mod RomFS per il gioco.

Ma quello è stato solo un antipasto; ecco il piatto principale. byte[] ha migliorato le prestazioni del parsing e della costruzione delle mod RomFS, riducendo il tempo di patch di The Legend of Zelda: Tears of the Kingdom con le mod applicate da 2.8 secondi a 0.3 secondi su una CPU ad alte prestazioni (un Ryzen 9 5950X in questo caso).

Esattamente la stessa correzione necessaria per Super Mario RPG, ma in un punto diverso, consente a Star Ocean: The Second Story R di avviarsi e giocare.

Per chiudere questa sezione, quale modo migliore per concludere che enumerare alcune delle battaglie vinte da byte[] per migliorare la stabilità dell’arresto.

La prima riguarda l’audio. Quando abbastanza dati di flusso sono ancora in attesa nella coda di output, il renderer audio attende fino a quando non ha spazio per aggiungere più dati.

Ma durante lo spegnimento, potrebbe non essere mai reso disponibile altro spazio, il che bloccherebbe il renderer audio in modo permanente e causerebbe un blocco. Risolvere questo blocco risolve le operazioni di spegnimento su Android.

La successiva è un po’ più complessa, poiché coinvolge la procedura necessaria per terminare un processo, alla James Bond. Questa procedura consiste in due fasi per ogni thread nel processo terminato:

  1. Il thread è contrassegnato per la terminazione e viene inviato un’interruzione a tutti i core con l’affinità di quel thread se è eseguibile.
  2. Il kernel attende quindi che il thread termini effettivamente. I thread eseguibili contrassegnati per la terminazione non vengono rimossi dalla coda di priorità di programmazione. Ciò significa che possono essere schedulati durante la terminazione, anche se il core ha già cancellato l’interruzione quando un thread precedente è stato terminato. Controllare la terminazione appena prima di eseguire nuovamente il thread, come fa lo Switch, ha risolto un blocco molto comune durante lo spegnimento su Android.

Infine, la coda degli eventi temporizzati causava problemi. Durante lo spegnimento, le chiamate di sistema per cancellare gli eventi in sospeso avvengono, anche mentre il thread temporizzato potrebbe ancora essere in fase di rimozione degli elementi dalla coda degli eventi.

Bloccare l’accesso alla coda degli eventi risolve l’ultimo arresto anomalo di questo mese.

Sezione Hardware

Lo scorso mese, è stato riportato che AMD stava interrompendo il supporto dei driver per i prodotti Polaris e Vega, e si è speculato su come ciò avrebbe potuto influire su Yuzu.

Quello che non abbiamo considerato è cosa succede alle configurazioni miste, ad esempio eseguire una iGPU Vega e una dGPU RDNA2.

Questo tipo di configurazione è piuttosto comune, poiché AMD continua a vendere nuovi dispositivi con GPU integrate Vega, e i produttori di laptop possono vendere configurazioni con prodotti RDNA2 o RDNA3 dedicati.

A differenza di Intel, che ha deciso semplicemente di dire “buona fortuna e arrivederci” alla loro utenza con grafica Gen 9/9.5/11 senza preavviso, AMD ha implementato un sistema in cui è ancora possibile eseguire driver per configurazioni miste.

Poiché su un laptop completamente AMD non è possibile utilizzare driver di fornitori diversi per le due GPU, ciò era praticamente obbligatorio.

Quello che ha fatto AMD è fornire due driver diversi, uno per l’hardware basato su RDNA e un altro per Vega e Polaris.

Se si dispone di un dispositivo misto, è possibile installare prima il driver per l’hardware basato su RDNA e successivamente sovrapporre il driver per Vega e Polaris.

Ciò consente di accedere a tutte le funzionalità del software del driver e consente di far funzionare entrambe le GPU senza problemi.

Ma c’è un prezzo da pagare: il driver Vulkan nel driver Vega e Polaris è più vecchio di quello nel driver per l’hardware basato su RDNA2, e tutte le GPU AMD che eseguono questa configurazione mista utilizzeranno un singolo driver Vulkan.

Ciò comporta un regresso nelle funzionalità e correzioni per la GPU basata su RDNA solo per mantenere la compatibilità.

Se si riscontrano problemi in Yuzu quando si esegue questa configurazione, ora si conosce la ragione. Purtroppo, l’unica soluzione è eseguire Linux, che dispone di un singolo e unificato driver Vulkan sempre aggiornato: RADV.

Intel ha confermato che il crash della geometria shader che colpisce diversi giochi è stato risolto internamente, ed è solo una questione di tempo prima che venga rilasciato un driver con la correzione implementata.

Attualmente, l’ultima versione al momento della stesura, la 101.5122 (primo driver di rilascio per i prodotti Iris Xe di seconda generazione), non include ancora la correzione.

Nel prossimo rapporto sui progressi, si spera che il problema discusso sarà risolto. Per quanto riguarda i progetti futuri, il rapporto promette interessanti novità, con modifiche già integrate che renderanno il contenuto succulento.

Tra le migliorie attese ci sono risparmi di memoria, tempi di caricamento più veloci e prestazioni migliorate.

Blinkhawk sta attualmente lavorando su qualcosa di misterioso, e si suggerisce che l’autore dovrebbe smettere di rovinare le sorprese, lasciando intravedere la possibilità di un regalo di Natale.

Fonte: twitter.com

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.