Il progetto Wine ha rilasciato la versione del pacchetto vkd3d 1.16 con l'implementazione di Direct3D 12, che opera tramite la traduzione delle chiamate nell'API grafica Vulkan. Il pacchetto include le librerie libvkd3d con l'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 porting di glxgears su Direct3D 12. Il codice del progetto è distribuito sotto la licenza LGPLv2.1.
La libreria libvkd3d supporta la maggior parte delle funzionalità di Direct3D 12, comprese le risorse per la grafica e i calcoli, le code e le liste di comandi, i descrittori e i descrittori delle heap, le firme radice, l'accesso non ordinato, i sampler, le firme di comando, le costanti radice, il rendering indiretto, i 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 vertice, pixel, tesselazione, calcolo e geometria semplice, serializzazione e deserializzazione della firma radice. Tra le istruzioni degli shader sono realizzate 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).
Nella nuova versione:
- Stabilita e abilitata di default la supporto per shader DXIL (DirectX Intermediate Language).
- Aggiunta una supporto iniziale per gli shader geometrici nel compilatore del linguaggio di shader HLSL. Per i modelli di shader 1, 2, 3 è stata implementata la supporto per l'indirizzamento indiretto, i moduli e i vincoli sui valori.
- Nella libreria libvkd3d è stata annunciata la supporto per il modello di shader 6.0. Nel'interfaccia ID3D12Device1 è stata implementata la funzione SetEventOnMultipleFenceCompletion(). Aggiunta la supporto per l'estensione Vulkan VK_KHR_zero_initialize_workgroup_memory per l'inizializzazione a zero della memoria per gli shader. Inclusa come obbligatoria l'estensione Vulkan VK_KHR_maintenance2, proposta nella specifica Vulkan 1.1.
- Aggiunta la supporto per il disassemblaggio degli shader SPIR-V e degli effetti binari 'fx_2_0'.
- Aggiunta la supporto sperimentale per l'indirizzamento indiretto dei buffer costanti in GLSL (OpenGL Shading Language).
- Nell'implementazione del linguaggio di shader MSL (Metal Shading Language), utilizzato da Apple nell'API grafica Metal, è stata aggiunta la possibilità di caricare texture.
- Aggiunta la supporto per le funzioni incorporate HLSL: AllMemoryBarrier(), AllMemoryBarrierWithGroupSync(), DeviceMemoryBarrier(), DeviceMemoryBarrierWithGroupSync(), GroupMemoryBarrier() e GroupMemoryBarrierWithGroupSync().
- Implementati i flag VKD3D_SHADER_COMPILE_OPTION_FEATURE_ZERO_INITIALIZE_WORKGROUP_MEMORY, VKD3D_SHADER_COMPONENT_INT64, VKD3D_SHADER_COMPONENT_FLOAT16, VKD3D_SHADER_COMPONENT_UINT16, VKD3D_SHADER_COMPONENT_INT16, VKD3D_SHADER_RESOURCE_DATA_NONE e VKD3D_SHADER_RESOURCE_DATA_UINT.
Fonte: opennet.ru
