După un an și jumătate de dezvoltare, proiectul Wine a publicat versiunea pachetului vkd3d 1.3 cu implementarea Direct3D 12, funcționând prin traducerea apelurilor în API-ul grafic Vulkan. Pachetul include bibliotecile libvkd3d cu implementarea Direct3D 12, libvkd3d-shader cu traductorul pentru shader-urile de model 4 și 5, și libvkd3d-utils cu funcții pentru simplificarea portării aplicațiilor Direct3D 12, precum și un set de exemple demonstrative, inclusiv portarea glxgears pe Direct3D 12. Codul proiectului este distribuit sub licența LGPLv2.1.
Biblioteca libvkd3d suportă majoritatea funcționalităților Direct3D 12, inclusiv instrumente pentru grafică și calcule, cozi și liste de comenzi, descriptori și heap-uri de descriptori, semnături rădăcină, acces nesortat, sampler-e, semnături de comenzi, constante rădăcină, desenare indirectă, metode Clear*() și Copy*().
În libvkd3d-shader a fost implementată traducerea bytecode-ului pentru shader-urile de model 4 și 5 într-o reprezentare intermediară SPIR-V. Sunt suportate shader-uri de vârf, pixel, teselare, calcul și geometrie simplă, serializarea și deserializarea semnăturii rădăcină. Din instrucțiunile shader-ului sunt implementate operațiile aritmetice, atomice și bitwise, operatorii de comparare și controlul fluxului de date, instrucțiile sample, gather și load, operațiile de acces nesortat (UAV, Unordered Access View).
Printre cele mai semnificative noutăți din Vkd3d 1.3 se numără:
- A fost adăugată suportul inițial pentru compilarea și preprocesarea shader-urilor în limbajul HLSL (High-Level Shader Language), disponibil începând cu DirectX 9.0.
- A fost adăugat suportul pentru array-uri de descriptori, definite în modelul shader-ului 5.1.
- S-a asigurat suportul pentru operațiile cu numere în virgulă mobilă de dublă precizie în shader-uri, adresarea indirectă pentru shader-urile de teselare, exportul de stencil-uri din shader-uri, modificatorul de shader „precise” și barierele globale pentru resursele din memorie.
- A fost implementată posibilitatea de disassemblare a shader-elor Direct3D din bytecode în reprezentarea assembler.
- A fost adăugat suportul pentru analiza vechiului format de bytecode Direct3D utilizat în modele de shader Direct3D 1, 2 și 3.
- În libvkd3d au fost adăugate funcții precum semnături de bază, contori de vizualizare cu acces nestructurat, operatori logici de unire pentru ieșire și modul de adresare a texturilor mirror_once în Direct3D 12. A fost adăugată structura vkd3d_host_time_domain_info.
Sursa: opennet.ro
