
D7VK 2.2 è ora disponibile come nuova versione del layer di traduzione grafica progettato per eseguire i classici giochi Windows su Linux. Il progetto, derivato da DXVK, si concentra sulla traduzione delle API Direct3D 7, 6, 5 e 3 in Vulkan per l'utilizzo con Wine e Proton, e questa nuova versione dedica una parte significativa del suo lavoro a una delle aree che presentava ancora le maggiori lacune: il supporto per Direct3D 3.
L'aggiornamento arriva a poche settimane di distanza da D7VK 2.1 e prosegue il processo di maturazione di una tecnologia particolarmente interessante per chi desidera giocare ai titoli di fine anni '90 e inizio 2000 sui moderni sistemi Linux. Oltre a migliorare Direct3D 3, D7VK 2.2 incorpora numerose correzioni di bug e modifiche interne, ed è basato sulla recente versione DXVK 3.1.
D7VK 2.2 si concentra su Direct3D 3
La principale novità di D7VK 2.2 riguarda Direct3D 3, un'API che era rimasta un po' indietro rispetto alle altre tecnologie più datate supportate dal progetto. Sebbene i giochi Direct3D 3 che lo sviluppatore era riuscito a raccogliere e testare funzionassero già con D7VK, persistevano diversi casi limite e comportamenti non implementati correttamente.
Questo si è rivelato particolarmente problematico perché il catalogo dei giochi che utilizzano Direct3D 3 è difficile da ricostruire. Si tratta di titoli molto vecchi, molti dei quali non sono più disponibili in commercio o sono difficili da reperire, il che rende complicato testare tutte le possibili implementazioni che si potrebbero incontrare nella pratica.
Con questa versione, lo sviluppatore ha rivisto gran parte dell'implementazione di Direct3D 3 per avvicinarla al livello di maturità raggiunto dalle altre API compatibili con D7VK.
Il comportamento dei dispositivi D3D3 è conforme all'originale
Una delle modifiche tecniche riguarda la riprogettazione del sistema di conteggio dei riferimenti per i dispositivi Direct3D 3. D7VK 2.2 modifica questo meccanismo in modo che il suo comportamento corrisponda a quello dell'implementazione API nativa.
Questo tipo di dettaglio potrebbe sembrare irrilevante per l'utente, ma è cruciale in un contesto di traduzione. I giochi più datati possono basarsi su comportamenti specifici relativi alla creazione e alla distruzione degli oggetti, e una differenza apparentemente piccola può portare a errori difficili da diagnosticare.
La nuova implementazione riduce quindi le probabilità che alcuni titoli non riescano a gestire i propri dispositivi grafici in un modo non previsto da D7VK.
D7VK 2.2 introduce miglioramenti alla trasparenza tramite chiave colore
D7VK 2.2 modifica anche la gestione del color keying sui dispositivi Direct3D 3 puri. Fino ad ora, il progetto utilizzava un modello molto semplice in cui questa funzione rimaneva sempre attiva in determinate circostanze.
La nuova versione consente un controllo preciso su quando attivarla, riproducendo in modo più fedele il comportamento di Direct3D 3. Ciò è particolarmente importante per i giochi più datati che utilizzano tecniche di trasparenza basate su colori specifici.
Inoltre, sono stati ottimizzati i calcoli relativi agli intervalli di colore normalizzati. Questi valori vengono ora aggiornati solo quando cambia la descrizione della superficie, consentendo di memorizzarli nella cache e riutilizzarli in seguito.
Il risultato dovrebbe essere un miglioramento da lieve a moderato delle prestazioni nei giochi che utilizzano la trasparenza della chiave di colore, nonché un comportamento più corretto.
I casi limite nei buffer di esecuzione vengono corretti
Un altro aspetto importante di D7VK 2.2 è la revisione delle validazioni del buffer di esecuzione di Direct3D 3. Il progetto ha riorganizzato parte di questa logica per affrontare diversi casi limite identificati durante i test.
Per verificare il comportamento previsto dell'API, lo sviluppatore si è avvalso anche dei test Wine specifici per Direct3D 3. Questi test consentono di confrontare il comportamento di D7VK con quello previsto da un'implementazione compatibile e di individuare differenze che potrebbero passare inosservate utilizzando solo giochi noti.
Questo lavoro è particolarmente prezioso per un'API così datata, dove i titoli disponibili per i test sono scarsi e non sempre coprono tutte le possibilità dell'implementazione originale.
Maggiore robustezza per le texture Direct3D 5 e 3
L'aggiornamento non si limita a Direct3D 3. D7VK 2.2 migliora anche la gestione delle texture utilizzate da Direct3D 5 e Direct3D 3 per evitare che le superfici sottostanti escano dal loro raggio d'azione pur essendo ancora in uso.
La modifica aumenta la robustezza della gestione delle risorse grafiche e può risolvere errori che si manifestano solo in determinate sequenze di operazioni. Lo sviluppatore osserva inoltre che questo miglioramento ha avuto un effetto positivo su Frogger , originariamente pubblicato nel 1997.
La patch mostra come le modifiche interne, pensate per risolvere problemi di gestione delle risorse, possano finire per avere effetti visibili su giochi specifici, anche quando la modifica non è stata progettata appositamente per essi.
D7VK 2.2 corregge anche i problemi di trasformazione e di matrice.
D7VK 2.2 corregge anche un bug relativo alla trasformazione dei buffer di esecuzione di Direct3D 3. Il problema era causato da una determinazione errata del formato FVF utilizzato per gli input dei vertici.
È stato inoltre risolto un problema relativo ai calcoli della matrice di proiezione legacy. Il bug è stato scoperto tramite un test Wine che non si comportava come previsto e avrebbe potuto avere un impatto negativo su alcune applicazioni Direct3D 6, 5 e 3.
Questi cambiamenti dimostrano ulteriormente l'importanza dei test di compatibilità per D7VK. Molti dei problemi con le API grafiche più vecchie non si manifestano necessariamente nei giochi più popolari, ma piuttosto in specifiche combinazioni di funzionalità che possono rimanere nascoste per anni.
Minori costi generali sui percorsi di disegno preesistenti
La nuova versione riorganizza anche il percorso di disegno Begin() / Vertex() / End() Utilizzato da Direct3D 6 e Direct3D 5. La modifica riduce il consumo di memoria e offre un lieve miglioramento delle prestazioni.
Ancora una volta, Frogger è tra i giochi che possono trarre vantaggio da questa modifica. Sebbene questa ottimizzazione non raddoppierà gli FPS di tutti i titoli retrò, contribuisce a ridurre parte del sovraccarico accumulato sui percorsi utilizzati dalle API più vecchie.
D7VK ha già beneficiato di significative ottimizzazioni prestazionali nelle versioni precedenti, pertanto il lavoro attuale si concentra sempre più sul perfezionamento dell'implementazione e sull'eliminazione dei costi superflui.
D7VK 2.2 parte di DXVK 3.1
Un'altra caratteristica importante di questa versione è che D7VK 2.2 è stato sostituito da DXVK 3.1 . Ciò consente al progetto di beneficiare di una base più recente e di mantenere la sua implementazione allineata con l'evoluzione di DXVK.
La relazione tra i due progetti è particolarmente importante. D7VK è nato come fork di DXVK, specializzato nelle API Direct3D meno recenti non supportate dall'utilizzo standard di DXVK, mentre entrambi utilizzano Vulkan come destinazione per le chiamate grafiche provenienti da Windows.
Grazie a questa relazione, i miglioramenti strutturali apportati a DXVK possono servire da base per l'evoluzione continua di D7VK, senza la necessità di sviluppare da zero tutta l'infrastruttura necessaria per comunicare con Vulkan.
Un progetto pensato per far rivivere i giochi classici.
D7VK ha un obiettivo ben preciso all'interno dell'ecosistema Linux: consentire ai giochi Windows che utilizzano Direct3D 7, 6, 5 e 3 di funzionare tramite Vulkan. Questo lo differenzia da DXVK, che si concentra principalmente su Direct3D 9, 10 e 11.
L'importanza del progetto aumenta quando si tratta di titoli che dipendono da tecnologie grafiche che Wine non implementa direttamente nello stesso modo o che possono trarre vantaggio da una traduzione più accurata in Vulkan.
Combinando D7VK con Wine o Proton, gli utenti Linux possono recuperare una notevole quantità di software risalente alla fine del XX e all'inizio del XXI secolo senza dover necessariamente ricorrere a una vecchia installazione di Windows.
Per chi usa Wine o Proton per giocare su Linux e desidera rispolverare titoli classici, D7VK 2.2 rafforza uno degli elementi più importanti dell'infrastruttura di compatibilità . E sebbene molti dei suoi miglioramenti possano essere invisibili all'utente, ogni correzione aumenta le possibilità che un gioco perduto nell'era di Direct3D 3, 5, 6 o 7 possa tornare a funzionare correttamente su un moderno sistema Linux.