Dopo sei mesi di sviluppo è stata rilasciata una nuova versione di DXVK (Direct3D to Vulkan Translation Layer), una libreria open source che converte le chiamate API Direct3D 8, 9, 10 e 11 in comandi Vulkan. Essa consente di eseguire applicazioni e giochi 3D progettati per Windows su sistemi in cui il supporto nativo per Direct3D non è disponibile, sfruttando nel contempo le capacità del più efficiente API grafico Vulkan.
Modifiche principali
Nella nuova versione è stata effettuata la transizione all'uso delle specifiche e delle estensioni Vulkan 1.4, il che richiederà di conseguenza un driver compatibile.
DXVK ora utilizza dxbc-spirv per la compilazione degli shader per tutti i modelli di shader supportati. Questo risolve una serie di problemi che in precedenza non era possibile affrontare:
Problemi di rendering nei giochi, causati sia da giochi che fanno affidamento su comportamenti indefiniti, sia dal fatto che FXC in alcuni casi genera codice errato, come in Postal: Brain Damaged, Snowrunner.
Il codice generato è più compatto rispetto al semplice codice SPIR-V convertito, il che riduce significativamente la quantità di memoria occupata da DXVK. In giochi come Overwatch o God of War, questo consente di risparmiare circa 1 GiB di memoria di sistema.
La compilazione degli shader è ora completamente spostata sui thread di lavoro, il che può ridurre i tempi di avvio in giochi come Days Gone e Final Fantasy XIV, o in alcuni casi diminuire i rallentamenti. In precedenza, DXVK eseguiva la traduzione SPIR-V nel thread dell'applicazione e compilava solo i veri pipeline Vulkan nei thread di lavoro.
La rappresentazione intermedia degli shader compilati da DXVK è ora memorizzata nella cache su disco all'interno della cartella AppData/Local dell'attuale prefisso Wine. Questo è necessario poiché il tempo di compilazione è aumentato rispetto al vecchio compilatore. Il percorso della cache può essere modificato utilizzando la variabile ambiente DXVK_SHADER_CACHE_PATH.
La nuova estensione Vulkan VK_EXT_descriptor_heap è ora utilizzata per impostazione predefinita nei driver che la supportano.
Rispetto alla vecchia implementazione del modello di binding, basata su VK_EXT_descriptor_buffer, si prevede che questo nuovo modello offra prestazioni simili a quelle della CPU, evitando allo stesso tempo la perdita di prestazioni sulla GPU Nvidia (è necessario nvidia-drivers-595.84 o superiore).
Modifiche a D3D9
Per emulare una pipeline obsoleta con funzioni fisse che consente ai giochi D3D8 e D3D9 di eseguire il rendering senza shader, DXVK in precedenza generava il proprio codice shader al volo in base allo stato della pipeline. In alcuni giochi, come Unreal Tournament 2004, questo poteva portare a rallentamenti significativi anche dopo lunghi periodi di gioco.
Per risolvere ciò, DXVK implementa ora la pipeline con funzioni fisse sotto forma di coppie di uber shader, per le quali le varianti ottimizzate vengono compilate in background.
Ottimizzazione del caricamento del buffer
Per allinearsi più precisamente al comportamento di Windows, vari tipi di buffer che in precedenza venivano allocati direttamente nella VRAM, ora vengono caricati su richiesta. È stata inoltre implementata una strategia di limitazione della memoria operativa che corregge i crash legati allo spazio di indirizzamento in vari giochi D3D9 a 32 bit.
Questi cambiamenti possono anche migliorare le prestazioni sui sistemi senza una dimensione BAR modificabile in giochi come GTA IV.
Nei sistemi che supportano adeguatamente VK_EXT_sample_locations e VK_EXT_extended_dynamic_state3, lo stato di rendering D3DRS_MULTISAMPLEANTIALIAS ora funziona correttamente, consentendo alle applicazioni di utilizzare la rasterizzazione con un singolo campione durante il rendering su destinazioni di rendering con più campioni. Questo risolve i problemi di rendering dell'interfaccia utente in Anno 1701, Men of War Assault Squad e problemi simili in altri giochi con MSAA attivato.
Le risorse comuni ora funzionano con l'implementazione originale di Wine e non richiedono più correzioni specifiche per Proton.
È importante menzionare anche numerosi fix per diversi giochi, che ora funzioneranno meglio.
Fonte: linux.org.ru
