Il progetto Wine ha pubblicato una versione del pacchetto vkd3d 1.7 con implementazione di Direct3D 12, funzionante tramite la traduzione delle chiamate all'API grafica Vulkan. Il pacchetto include le librerie libvkd3d con implementazione di Direct3D 12, libvkd3d-shader con il traduttore per shader di modello 4 e 5, e libvkd3d-utils con funzioni per semplificare il porting delle applicazioni Direct3D 12, oltre a un insieme di esempi dimostrativi, incluso il port di glxgears su Direct3D 12. Il codice del progetto è distribuito sotto licenza LGPLv2.1.
La libreria libvkd3d supporta la maggior parte delle funzionalità di Direct3D 12, inclusi strumenti per grafica e calcolo, code e liste di comandi, descrittori e descrittori di heap, firme radice, accesso non ordinato, sampler, firme di comandi, costanti radice, rendering indiretto, metodi Clear*() e Copy*(). In libvkd3d-shader è implementata la traduzione del bytecode per gli shader di modello 4 e 5 in rappresentazione intermedia SPIR-V. Sono supportati shader vertex, pixel, tessellatori, computazionali e shader geometrici semplici, serializzazione e deserializzazione di una firma radice. Tra le istruzioni per shader sono implementate operazioni aritmetiche, atomiche e bit a bit, operatori di confronto e di controllo del flusso di dati, istruzioni sample, gather e load, operazioni di accesso non ordinato (UAV, Unordered Access View).
Nella nuova versione:
- È proseguito il lavoro per migliorare il compilatore di shader nel linguaggio HLSL (High-Level Shader Language):
- È stata aggiunta la possibilità di chiamare funzioni personalizzate e utilizzare array come parametri per le funzioni personalizzate.
- È stata aggiunta la supporto per i parametri SV_DispatchThreadID, SV_GroupID e SV_GroupThreadID.
- Sono state aggiunte funzioni incorporate all(), distance(), exp(), exp2(), frac(), lit(), reflect(), sin(), cos(), smoothstep(), sqrt(), rsqrt(), step(), transpose().
- È stato aggiunto un supporto iniziale per tipi a bassa precisione a virgola mobile, come «min16float».
- È stato notevolmente migliorato il supporto per i profili di shader di Direct3D 1/2/3.
- È stata aggiunta un'API pubblica per la parsificazione (vkd3d_shader_parse_dxbc) e la serializzazione (vkd3d_shader_serialize_dxbc) dei dati binari DXBC.
Fonte: opennet.ru
