Μετά από ενάμιση χρόνο ανάπτυξης, το έργο Wine κυκλοφόρησε το πακέτο vkd3d 1.3 με μια υλοποίηση Direct3D 12 που λειτουργεί μέσω μετάφρασης κλήσεων στο API γραφικών Vulkan. Το πακέτο περιλαμβάνει τις βιβλιοθήκες libvkd3d με υλοποιήσεις Direct3D 12, το libvkd3d-shader με έναν μεταφραστή των μοντέλων shader 4 και 5, και το libvkd3d-utils με συναρτήσεις για την απλοποίηση της μεταφοράς εφαρμογών Direct3D 12, καθώς και ένα σύνολο παραδειγμάτων επίδειξης, συμπεριλαμβανομένης μιας μεταφοράς του glxgears στο Direct3D 12. Ο κώδικας του έργου διανέμεται με την άδεια LGPLv2.1.
Η βιβλιοθήκη libvkd3d υποστηρίζει τις περισσότερες από τις λειτουργίες του Direct3D 12, συμπεριλαμβανομένων γραφικών και υπολογιστικών δυνατοτήτων, ουρών και λιστών εντολών, περιγραφέων και περιγραφέων σωρού, υπογραφών ρίζας, μη διατεταγμένης πρόσβασης, δειγματοληπτών, υπογραφών εντολών, σταθερών ρίζας, έμμεσης απόδοσης, μεθόδων Clear*() και Copy*().
Στο libvkd3d-shader, υλοποιείται η μετάφραση του bytecode των μοντέλων shader 4 και 5 σε μια ενδιάμεση αναπαράσταση SPIR-V. Υποστηρίζονται σκίαστρες Vertex, pixel, tessellation, compute και απλής γεωμετρίας, σειριοποίηση υπογραφής ρίζας και deserialization. Οι οδηγίες Shader περιλαμβάνουν αριθμητικές, ατομικές και bit λειτουργίες, σύγκριση και τελεστές ελέγχου ροής δεδομένων, δειγματοληψία, συλλογή και φόρτωση εντολών, λειτουργίες πρόσβασης χωρίς σειρά (UAV, Unordered Access View).
Μεταξύ των σημαντικότερων καινοτομιών στο Vkd3d 1.3 είναι:
- Προστέθηκε αρχική υποστήριξη για τη μεταγλώττιση και την προεπεξεργασία shaders στη γλώσσα HLSL (High-Level Shader Language) που παρέχεται από την έκδοση DirectX 9.0.
- Προστέθηκε υποστήριξη για πίνακες περιγραφέων που ορίζονται στο Shader Model 5.1.
- Παρέχεται υποστήριξη για λειτουργίες κινητής υποδιαστολής διπλής ακρίβειας σε shaders, έμμεση διευθυνσιοδότηση για shaders tessellation, εξαγωγή στένσιλ από shaders, έναν "ακριβή" τροποποιητή shader και καθολικά εμπόδια για πόρους μνήμης.
- Υλοποιήθηκε η δυνατότητα αποσυναρμολόγησης shaders Direct3D από bytecode σε assembly αναπαράσταση.
- Προστέθηκε υποστήριξη για την ανάλυση της παλιάς μορφής bytecode Direct3D που χρησιμοποιείται στα μοντέλα shader Direct3D 1, 2 και 3.
- Το libvkd3d προσθέτει χαρακτηριστικά του Direct3D 12 όπως υπογραφές root, μη ταξινομημένους μετρητές προβολής, λογικούς τελεστές συγχώνευσης για έξοδο, λειτουργία διευθυνσιοδότησης υφής mirror_once. Προστέθηκε η δομή vkd3d_host_time_domain_info.
Πηγή: opennet.ru
