Home Emulatori L’emulatore Yuzu riceve una grande riscrittura del codice

L’emulatore Yuzu riceve una grande riscrittura del codice

3
0

L’emulatore Yuzu si appresta a chiudere l’anno con una delle più grandi riscritture di codice soprannominato Texture Cache Rewrite e disponibile per i membri in Accesso anticipato.

Yuzu nasce come un fork di Citra (l’emulatore della console 3DS), e di conseguenza la cache delle texture di Citra (o cache del rasterizzatore, come veniva chiamata all’epoca) fu utilizzata sin dai primi giorni di Yuzu.

Questa cache supportava solo OpenGL, quindi uno dei primi sforzi per aggiungere il supporto Vulkan è stato quello di rendere il codice più generico, aiutando l’emulazione della GPU.

Lo sviluppo ha richiesto tempo, in quanto il team ha studiato il funzionamento della GPU. Alcune decisioni di progettazione prese all’epoca si bloccavano con la base del codice rendendo le cose più difficili.

Quindi fuori con il vecchio, dentro con il nuovo. L’implementazione precedente non era più sufficiente, quindi Rodrigo ha iniziato a lavorare su di una completa riscrittura da zero. Ciò include ma non è limitato a:

  • Codice più pulito. Niente più chiamate virtuali o puntatori condivisi, ciò consente una manutenzione più semplice in futuro.
  • Manipolazione corretta per l’effetto swizzling.
  • Alcune operazioni ora vengono eseguite nella GPU invece che nella CPU, migliorando le prestazioni.
  • Controlla quando distrugge le texture.
  • In precedenza, le texture venivano rimosse dalla cache durante le scritture della CPU, ma ora sono contrassegnate come sporche. Ciò consente a Yuzu di memorizzare nella cache le visualizzazioni di immagini già visitate e di renderizzare gli obiettivi, risparmiando tempo.
  • Texture multiple possono coesistere nello stesso indirizzo ora.
  • Le immagini con aliasing ora vengono emulate tramite copie su richiesta.
  • Il rendering su texture compresse ora viene emulato correttamente.
  • Le texture 3D BC4 ora vengono emulate con RGBA8.
  • Il rendering ora mostra texture di diversi formati compatibili ed emulati senza copie.

Ma in che modo questo aiuta? In breve, corregge molti bug grafici, migliora le prestazioni e non si limita a nessuna configurazione hardware o driver in uso.

Prima di parlare delle prestazioni, ecco solo alcuni esempi delle correzioni di rendering che puoi aspettarti di vedere con questa versione:

Le ombre in Splatoon 2 ora sono renderizzate correttamente, permettendoci finalmente di ammirare il bellissimo paesaggio urbano.

La corruzione dell’illuminazione e dell’ombra dello stencil ora è risolta in Luigi’s Mansion 3.

Astral Chain non mostra più la corruzione scura della texture.

I problemi di profondità del campo sono stati corretti in Animal Crossing: New Horizons.

Xenoblade Chronicles 2 è esente da esplosioni di vertex sui driver AMD Vulkan.

I problemi di scambio di texture e sfarfallio sono stati corretti in tutti i giochi Xenoblade Chronicles.

I jumbotron ora vengono visualizzati correttamente in Super Smash Bros.Ultimate. Ecco un esempio in esecuzione nei driver Linux OpenGL di RadeonSI Mesa.

Yuzu ora ha il supporto Multisample anti-aliasing (MSAA), come mostrato in SONIC FORCES qui.

Corretta la pioggia lenta in The Legend of Zelda: Breath of the Wild (richiede un’elevata precisione della GPU).

Il teletrasporto delle rune viene renderizzato proprio come l’hardware nativo in The Legend of Zelda: Breath of the Wild.

Ma per quanto riguarda le prestazioni?

Oltre ai miglioramenti del rendering, molti giochi mostrano un miglioramento del 10~30% del framerate, con una stabilità frametime notevolmente migliorata come dimostrato di seguito:

Luigi’s Mansion 3 ha ricevuto alcuni enormi miglioramenti nella precisione di rendering *e* nelle prestazioni, nota il grafico frametime

Super Mario Odyssey

The Legend of Zelda: Breath of the Wild

Animal Crossing: New Horizons

Limitazioni attuali e progressi futuri

A causa di queste modifiche, l’hardware privo dell’estensione VK_EXT_robustness2 non produrrà un’esperienza ottimale. In Windows, questo include schede grafiche AMD precedenti a Vega (Polaris e serie precedenti) e tutte le iGPU Intel fino ad oggi.

Puoi controllare l’attuale supporto qui. I giochi che richiedono questa estensione su hardware non supportato potrebbero comportarsi in modo casuale o bloccarsi in rari casi.

Si sta lavorando a un percorso del codice di fallback. Assicurati di essere aggiornato con i tuoi driver, poiché il fornitore della GPU potrebbe essere in grado di aggiungere supporto in futuro se l’hardware lo consente.

In origine, ci si aspettava di aggiungere il supporto di Bindless Texture, ma durante lo sviluppo sono emerse diverse difficoltà. Uno dei problemi è la mancanza di supporto hardware nativo per la decodifica delle texture ASTC.

Se usassimo texture non compresse, le GPU con meno di 8 GB di VRAM non sarebbero in grado di caricare tutte le risorse di gioco e se le ricomprimessimo in un altro formato di texture per evitare questo problema, la qualità dell’immagine peggiorerebbe.

Il vero supporto della texture senza legame può essere preso nuovamente in considerazione in futuro.

I Depth Stencil Blits non sono implementati su Vulkan per i dispositivi che non offrono supporto nativo (qualsiasi GPU AMD e Intel).

Un’altra complicazione emersa durante lo sviluppo è legata alla gestione della memoria. L’idea era di rilasciare Texture Cache Rewrite con quello che il team chiama Texture Reaper, un modo per rimuovere le texture dalla VRAM che non sono state utilizzate dopo un po di tempo.

Sebbene questo abbia quasi funzionato in OpenGL durante i test, riuscendo a eseguire Luigi’s Mansion 3 in meno di 300 MB di VRAM, Vulkan d’altra parte non ha ricevuto alcun vantaggio.

Vulkan affronta un problema principale: frammenta la memoria quando le texture devono essere mappate su una memoria video contigua. Non c’è tolleranza per la frammentazione, quindi liberare i blocchi non aiuterà affatto se la texture successiva non si adatta al nuovo spazio vuoto.

Ciò richiederà lo sviluppo di una routine di deframmentazione VRAM, un lavoro che può richiedere parecchio tempo. Quindi possiamo dire che oggi segna il giorno in cui inizia Project Texture Reaper.

Una funzionalità che verrà aggiunta poco dopo sarà Accelerated Texture Decoding, che gestirà qualsiasi formato di texture tramite Compute Shader, anche i formati che la GPU non supporta nativamente, epicboy sta lavorando al decodificatore di calcolo ASTC.

Il prossimo progetto su cui Rodrigo sta lavorando è il Buffer Cache Rewrite. Questo lavoro promette di risolvere molti più problemi di rendering (ad esempio problemi di rendering dei caratteri) e di migliorare seriamente le prestazioni, specialmente su hardware a corto di larghezza di banda della memoria come le GPU integrate.

E con ciò, la nostra panoramica della riscrittura della cache delle texture è terminata! Si prega di segnalare eventuali bug o problemi riscontrati con questa nuova funzionalità sul nostro server Discord o sui nostri forum.

Fonte: yuzu-emu.org

(Visited 1 times, 1 visits today)