Il progetto Wine ha rilasciato il pacchetto vkd3d 1.12 con implementazione di Direct3D 12, funzionante tramite traduzione delle chiamate nell'API grafica Vulkan. Il pacchetto include le librerie libvkd3d con implementazione di Direct3D 12, libvkd3d-shader con il traduttore per i modelli di shader di 4 e 5 generazione e libvkd3d-utils con funzioni per semplificare il porting delle applicazioni Direct3D 12, oltre a una serie di esempi dimostrativi, compreso il porting di glxgears su Direct3D 12. Il codice del progetto è distribuito sotto licenza LGPLv2.1.
La libreria libvkd3d supporta gran parte delle funzionalità di Direct3D 12, inclusi strumenti per grafica e calcolo, code e liste di comandi, descrittori e heap descrittori, 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 dei modelli di shader in rappresentazione intermedia SPIR-V. Sono supportati shader di vertici, pixel, tessellazione, calcolo e semplici shader geometrico, oltre alla serializzazione e deserializzazione della firma radice. Tra le istruzioni degli shader sono implementate operazioni aritmetiche, atomiche e bit, operatori di confronto e controllo del flusso dei dati, istruzioni sample, gather e load, operazioni di accesso non ordinato (UAV, Unordered Access View).
Nella nuova versione:
- Nel compilatore HLSL è stata aggiunta la supporto per la compilazione diretta in codice assembly per i shader di Direct3D e i tipi target di SPIR-V.
- Nel compilatore HLSL è stato migliorato il supporto per i profili di modelli di shader 1, 2 e 3.
- Per HLSL sono state implementate funzioni integrate cosh(), determinant(), refract(), sinh() e tanh().
- In libvkd3d è stato aggiunto il supporto per i formati DXGI_FORMAT_B5G6R5_UNORM, DXGI_FORMAT_B5G5R5A1_UNORM e DXGI_FORMAT_B4G4R4A4_UNORM, se supportati nell'implementazione API Vulkan esistente.
- È stato aggiunto il supporto per le interfacce ID3D12ShaderCacheSession e ID3D12Device9. Nell'interfaccia ID3D12Device8 sono stati aggiunti i metodi CreateCommittedResource2(), CreatePlacedResource1(), GetCopyableFootprints1() e GetResourceAllocationInfo2().
- Sono stati implementati i controlli di verifica D3D12_FEATURE_D3D12_OPTIONS14, D3D12_FEATURE_D3D12_OPTIONS15, D3D12_FEATURE_D3D12_OPTIONS16, D3D12_FEATURE_D3D12_OPTIONS17 e D3D12_FEATURE_D3D12_OPTIONS18.
- In libvkd3d-shader per il linguaggio intermedio DXIL (DirectX Intermediate Language) è stato aggiunto il supporto sperimentale per la maggior parte dei metodi e delle istruzioni di 6 modelli di shader di Direct3D.
Fonte: opennet.ru
