rilascio del progetto , che fornisce un'implementazione di Direct3D 9, funziona tramite la traduzione delle chiamate nell'API grafica . Il progetto si basa sul codice sorgente del progetto , che è stato ampliato con il supporto di Direct3D 9. Rispetto all'implementazione di Direct3D 9 basata su WineD3D, D9VK consente di ottenere prestazioni migliori, poiché la traduzione di Direct3D 9 tramite OpenGL è più lenta rispetto alla traduzione tramite Vulkan.
D9VK può essere utilizzato per eseguire applicazioni e giochi 3D su Linux tramite Wine. Supporta l'esecuzione della maggior parte dei giochi basati su Direct3D 9, che utilizzano la versione 2 o 3 del Shader Model. Il codice del progetto è sotto la licenza libera Zlib. Per utilizzare D9VK è necessario avere driver con supporto per l'API Vulkan, come AMD RADV 18.3+, NVIDIA 415.22+, Intel ANV 19.0+ e AMDVLK.
Principali miglioramenti:
- È stata implementata la possibilità di utilizzare oltre 4 GB di memoria video nelle applicazioni a 32 bit, risolvendo i problemi durante l'esecuzione delle mod nei giochi Skyrim e Oblivion;
- È stata inclusa l'elaborazione asincrona del risultato del rendering sullo schermo (fase di presentazione). Per ridurre i ritardi nel thread principale di rendering, l'elaborazione dell'output viene eseguita nel thread di invio comandi;
- Sono stati rimossi i punti di sincronizzazione superflui del thread di comando durante l'estrazione dei dati richiesti;
- Il codice per determinare il tempo interno è stato tradotto per utilizzare un timer specifico per la piattaforma, il che ha aiutato a risolvere i problemi con il comportamento non corretto dell'high_resolution_clock di MinGW;
- È stata garantita la scaricamento dei buffer in attesa MANAGED e SYSTEMMEM prima dell'esecuzione di PrepareDraw, risolvendo i problemi di prestazioni nei giochi Risen e Legend of the Heroes: Trails of the Sky;
- È stata aggiunta la supporto per , che ha consentito di implementare correttamente il rendering nei giochi SpinTyres e Mudrunner;
- È stata migliorata la compatibilità con (D3D9Ex). È stata considerata la specificità del trattamento di ResetEx e Reset;
- È stata effettuata una pulizia e un rifacimento del codice;
- È stata garantita la mappatura diretta dei buffer WRITEONLY, che può avere un impatto positivo sulle prestazioni ed evitare un bug nel gioco
Counter-Strike: Global Offensive, che porta a continuare la scrittura nel buffer dopo il suo sblocco; - È stato implementato il metodo , che consente di utilizzare finestre di dialogo nelle applicazioni a schermo intero;
- È stata implementata la supporto , inclusi , necessario per SWVP (SoftWare Vertex Processing);
- È stato riprogettato il contatore del campionatore, visualizzato sopra l'immagine corrente (heads-up display, HUD);
- È stata aggiunta l'opzione d3d9.dialogBoxMode, che può essere utilizzata per disabilitare il funzionamento esclusivamente in modalità schermo intero;
- Sono state apportate ottimizzazioni delle prestazioni e risolti i problemi riscontrati durante l'avvio dei giochi GTA: San Andreas, The Masquerade Bloodlines, Max Payne 2, The Sims 2, Silent Hunter 3, Senran Kagura Shinovi, Dungeons and Dragons, Crysis, Metal Slug X, ANGLE, Need for Speed: Carbon e Risen 1.
In aggiunta, si può notare sviluppatore del progetto (implementazione DXGI, Direct3D 10 e Direct3D 11 sopra l'API Vulkan) per concentrarsi temporaneamente solo sulla correzione dei bug, rallentando l'espansione delle funzionalità. Tale desiderio è dovuto a preoccupazioni per la diminuzione della qualità del codice sorgente e la complessità della manutenzione in futuro. Ogni aggiornamento della versione 1.4.x genera lamentele su modifiche regressive, che non è possibile riprodurre, localizzare e risolvere.
Questi problemi richiedono un'analisi delle cause della loro comparsa, altrimenti lasciare che rimangano irrisolti mentre si continua ad aumentare le funzionalità potrebbe solo aggravare la situazione e trasformare il processo di manutenzione in un incubo. Tra i piani che il sviluppatore di DXVK intende realizzare prima di passare alla modalità solo correzione di bug vi è l'aggiunta del supporto per alcune estensioni utili di Vulkan e la fusione con i lavori del progetto D9VK.
Aggiornamento: sul campo rilascio corretto di D9VK 0.40.1, in cui il valore predefinito di vec4(1) per COLOR0 negli shader dei vertici ed è stato risolto un problema per cui i bit delle slot per le uscite dello shader venivano applicati in modo errato per impostazione predefinita e, di conseguenza, corretti in modo errato dal backend, causando la loro sostituzione con vec4(0).
Fonte: opennet.ru
