Proiectul Wine a publicat o nouă versiune a pachetului vkd3d 1.14, care implementează Direct3D 12, funcționând prin translatia apelurilor către API-ul grafic Vulkan. Pachetul include bibliotecile libvkd3d cu implementarea Direct3D 12, libvkd3d-shader cu translatorul pentru modelele de shader 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 portul glxgears pe Direct3D 12. Codul proiectului este distribuit sub licența LGPLv2.1.
Biblioteca libvkd3d suportă majoritatea caracteristicilor Direct3D 12, inclusiv instrumente pentru grafică și calcul, cozi și liste de comenzi, descriere și descriere a unui heap, semnături rădăcină, acces nesortat, Sample-uri, semnături de comenzi, constante rădăcină, randare indirectă, metode Clear*() și Copy*(). În libvkd3d-shader este implementată translația bytecode-ului shaderelor la reprezentări intermediare SPIR-V. Se suportă shadere de vârf, pixel, tesselație, calcul, și shadere geometrice simple, serializarea și deserializarea semnăturii rădăcină. Din instrucțiunile shaderului sunt implementate operații aritmetice, atomice și bitwise, operatori de comparație și control al fluxului de date, instrucțiuni sample, gather și load, operații de acces nesortat (UAV, Unordered Access View).
În noua versiune:
- A fost adăugată suportul inițial pentru limbajul de shader MSL (Metal Shading Language), utilizat de Apple în API-ul său grafic Metal.
- A fost implementat suportul pentru disassembler pentru efectele binare.
- În biblioteca libvkd3, în interfața ID3D12GraphicsCommandList1 a fost implementată metoda OMSetDepthBounds() pentru a modifica dinamic intervalul admis de valori de adâncime în Z-buffer.
- A fost adăugată variabila de mediu VKD3D_CAPS_OVERRIDE pentru a suprascrie informațiile furnizate aplicațiilor despre capabilitățile disponibile, cum ar fi nivelele maximale de funcționalitate și legăturile resurselor.
- În implementarea limbajului de shader HLSL a fost adăugată suportul inițial pentru shader-ele de tesselație. Funcții încorporate precum dst(), f32tof16(), mad(), modf() și sincos() au fost implementate. Pentru profilele de shader de model 1, 2 și 3 a fost adăugat suport pentru operația 'discard'. A fost adăugată suportul pentru semantica datelor de intrare SV_SampleIndex pentru shader-ele fragmentare și SV_GroupIndex pentru shader-ele compute.
- A fost implementată o mare porțiune de noi instrucțiuni pentru limbajul de shader GLSL.
Sursa: opennet.ro
