Μετά από έξι μήνες ανάπτυξης, κυκλοφόρησε μια νέα έκδοση του DXVK (Direct3D to Vulkan Translation Layer). Αυτή η βιβλιοθήκη ανοιχτού κώδικα μετατρέπει τις κλήσεις API Direct3D 8, 9, 10 και 11 σε εντολές Vulkan. Σας επιτρέπει να εκτελείτε εφαρμογές και παιχνίδια 3D που έχουν αναπτυχθεί για... Windows, σε συστήματα όπου απουσιάζει η εγγενής υποστήριξη Direct3D, αξιοποιώντας παράλληλα το πιο αποτελεσματικό API γραφικών Vulkan.
Σημαντικές αλλαγές
Η νέα έκδοση έχει μεταβεί στη χρήση των προδιαγραφών και των επεκτάσεων του Vulkan 1.4, οι οποίες θα απαιτήσουν αναλόγως συμβατό πρόγραμμα οδήγησης.
Το DXVK χρησιμοποιεί πλέον dxbc-spirv για τη μεταγλώττιση shaders για όλα τα υποστηριζόμενα μοντέλα shader. Αυτό επιλύει μια σειρά από προβλήματα που προηγουμένως ήταν αδύνατο να επιλυθούν:
Προβλήματα απόδοσης σε παιχνίδια, που προκαλούνται είτε από παιχνίδια που βασίζονται σε απροσδιόριστη συμπεριφορά είτε από το FXC που δημιουργεί μη έγκυρο κώδικα σε ορισμένες περιπτώσεις, όπως στα Postal: Brain Damaged, Snowrunner
Ο κώδικας που δημιουργείται είναι πιο συμπαγής από τον απλό κώδικα SPIR-V που έχει μετατραπεί, μειώνοντας σημαντικά το αποτύπωμα μνήμης του DXVK. Σε παιχνίδια όπως το Overwatch ή το God of War, αυτό εξοικονομεί περίπου 1 GiB μνήμης συστήματος.
Η μεταγλώττιση Shader έχει πλέον μετακινηθεί πλήρως σε threads worker, κάτι που μπορεί να βελτιώσει τους χρόνους εκκίνησης σε παιχνίδια όπως το Days Gone και το Final Fantasy XIV ή να μειώσει το stuttering σε ορισμένες περιπτώσεις. Προηγουμένως, το DXVK εκτελούσε μετάφραση SPIR-V στο thread της εφαρμογής και μεταγλώττιζε μόνο τους πραγματικούς αγωγούς Vulkan στις διεργασίες worker.
Η ενδιάμεση αναπαράσταση των μεταγλωττισμένων shaders DXVK αποθηκεύεται πλέον προσωρινά στον δίσκο εντός του καταλόγου AppData/Local του τρέχοντος προθέματος Wine. Αυτό είναι απαραίτητο επειδή οι χρόνοι μεταγλώττισης έχουν αυξηθεί σε σύγκριση με τον παλιό μεταγλωττιστή. Η διαδρομή προσωρινής αποθήκευσης μπορεί να αλλάξει χρησιμοποιώντας τη μεταβλητή περιβάλλοντος DXVK_SHADER_CACHE_PATH.
Η νέα επέκταση Vulkan VK_EXT_descriptor_heap χρησιμοποιείται πλέον από προεπιλογή σε προγράμματα οδήγησης που την υποστηρίζουν.
Σε σύγκριση με την παλιά υλοποίηση μοντέλου σύνδεσης που βασίζεται στο VK_EXT_descriptor_buffer, αυτό το νέο μοντέλο αναμένεται να παρέχει περίπου το ίδιο επίπεδο απόδοσης που συνδέεται με την CPU, αποφεύγοντας παράλληλα την επιβάρυνση στην απόδοση στις GPU της Nvidia (απαιτείται nvidia-drivers-595.84 και νεότερη έκδοση).
Αλλαγές D3D9
Για να μιμηθεί το παλαιότερο pipeline σταθερής συνάρτησης που επιτρέπει στα παιχνίδια D3D8 και D3D9 να αποδίδονται χωρίς shaders, το DXVK προηγουμένως δημιουργούσε τον δικό του κώδικα shader εν κινήσει με βάση την κατάσταση του pipeline. Σε ορισμένα παιχνίδια, όπως το Unreal Tournament 2004, αυτό θα μπορούσε να οδηγήσει σε αισθητό τραύλισμα ακόμα και μετά από εκτεταμένες περιόδους παιχνιδιού.
Για να διορθώσει αυτό το πρόβλημα, το DXVK εφαρμόζει πλέον έναν αγωγό σταθερής συνάρτησης ως ζεύγος ubershaders, για τον οποίο μεταγλωττίζονται βελτιστοποιημένες παραλλαγές στο παρασκήνιο.
Βελτιστοποίηση φόρτωσης buffer
Για να ταιριάζει περισσότερο η συμπεριφορά Windows, διάφοροι τύποι buffer που προηγουμένως τοποθετούνταν απευθείας στην VRAM φορτώνονται πλέον κατ' απαίτηση και έχει εφαρμοστεί μια στρατηγική περιορισμού της RAM που διορθώνει σφάλματα που σχετίζονται με τον χώρο διευθύνσεων σε μια σειρά παιχνιδιών D3D9 32-bit.
Αυτές οι αλλαγές ενδέχεται επίσης να βελτιώσουν την απόδοση σε συστήματα χωρίς δυνατότητα αλλαγής μεγέθους BAR σε παιχνίδια όπως το GTA IV.
Σε συστήματα που υποστηρίζουν επαρκώς τα VK_EXT_sample_locations και VK_EXT_extended_dynamic_state3, η κατάσταση απόδοσης D3DRS_MULTISAMPLEANTIALIAS λειτουργεί πλέον σωστά, επιτρέποντας στις εφαρμογές να χρησιμοποιούν rasterization ενός δείγματος κατά την απόδοση σε στόχους απόδοσης πολλαπλών δειγμάτων. Αυτό επιλύει προβλήματα απόδοσης UI στο Anno 1701, το Men of War Assault Squad και παρόμοια προβλήματα σε άλλα παιχνίδια με ενεργοποιημένο το MSAA.
Οι κοινόχρηστοι πόροι λειτουργούν πλέον με την αρχική υλοποίηση του Wine και δεν απαιτούν πλέον ενημερώσεις κώδικα ειδικά για το Proton.
Αξίζει επίσης να αναφερθούν πολλές διορθώσεις για διάφορα παιχνίδια που πλέον θα τρέχουν καλύτερα.
Πηγή: linux.org.ru
