Dopo un anno e mezzo di sviluppo, il progetto Wine ha pubblicato il pacchetto vkd3d 1.3 con l'implementazione di Direct3D 12, che funziona tramite la traduzione delle chiamate nell'API grafica Vulkan. Il pacchetto include le librerie libvkd3d con l'implementazione di Direct3D 12, libvkd3d-shader con un traduttore per i modelli di shader 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 la licenza LGPLv2.1.
La libreria libvkd3d supporta gran parte delle funzionalità di Direct3D 12, inclusi strumenti per grafica e calcoli, code e liste di comandi, descrittori e descrittori di heap, firme radice, accesso non ordinato, sampler, firme di comando, costanti radice, rendering indiretto, metodi Clear*() e Copy*().
In libvkd3d-shader è implementata la traduzione del bytecode delle versioni 4 e 5 dei shader in una rappresentazione intermedia SPIR-V. Sono supportati shader di vertice, pixel, tesselazione, calcolo e geometria semplice, serializzazione e deserializzazione della firma radice. Tra le istruzioni degli shader sono implementate operazioni aritmetiche, atomiche e bitwise, operatori di confronto e controllo del flusso di dati, istruzioni sample, gather e load, operazioni di accesso non ordinato (UAV, Unordered Access View).
Tra le novità più significative in Vkd3d 1.3 si evidenziano:
- Aggiunta la supporto iniziale per la compilazione e il preprocessing degli shader nel linguaggio HLSL (High-Level Shader Language), fornito a partire da DirectX 9.0.
- Aggiunto il supporto per gli array di descrittori definiti nei modelli di shader 5.1.
- Garantito il supporto per le operazioni con numeri in virgola mobile a doppia precisione negli shader, indirizzamento indiretto per gli shader di tessellazione, esportazione di maschere dagli shader, modificatore di shader "precise" e barriere globali per le risorse in memoria.
- Implementata la possibilità di disassemblare gli shader Direct3D dal bytecode alla rappresentazione in assembler.
- Aggiunto il supporto per l'analisi del vecchio formato di bytecode Direct3D utilizzato nei modelli di shader Direct3D 1, 2 e 3.
- In libvkd3d sono state aggiunte funzionalità di Direct3D 12 come firme radice, contatori di visualizzazione con accesso non ordinato, operatori logici di fusione per l'output, modalità di indirizzamento delle texture mirror_once. Aggiunta la struttura vkd3d_host_time_domain_info.
Fonte: opennet.ru
