Il progetto Wine ha pubblicato la versione del pacchetto vkd3d 1.11 con l'implementazione di Direct3D 12, funzionante tramite traduzione delle chiamate nell'API grafica Vulkan. Il pacchetto include le librerie libvkd3d con l'implementazione di Direct3D 12, libvkd3d-shader con il traduttore dei modelli di shader 4 e 5 e libvkd3d-utils con funzioni per semplificare il porting delle applicazioni Direct3D 12, oltre a un set di esempi dimostrativi, incluso 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 gli strumenti per grafica e calcoli, code e liste di comandi, descrittori e descrittori heap, firme root, accesso non ordinato, sampler, firme di comandi, costanti root, rendering indiretto, metodi Clear*() e Copy*(). In libvkd3d-shader è implementata la traduzione del codice byte dei modelli di shader 4 e 5 in una rappresentazione intermedia SPIR-V. Sono supportati shader vertex, pixel, tessellazione, calcolo e geometria semplice, serializzazione e deserializzazione della firma root. Tra le istruzioni degli shader sono implementate operazioni aritmetiche, atomiche e bitwise, operatori di confronto e controllo del flusso di trasferimento dati, istruzioni sample, gather e load, e operazioni di accesso non ordinato (UAV, Unordered Access View).
Nella nuova versione:
- Aggiunta il supporto iniziale per la compilazione del vecchio bytecode Direct3D in una rappresentazione intermedia degli shader SPIR-V.
- Il compilatore HLSL ha aggiunto il supporto iniziale per la compilazione dei profili degli effetti Direct3D ("fx_2_0", "fx_4_0", "fx_4_1" e "fx_5_0").
- Aggiunto il supporto sperimentale per la compilazione del linguaggio intermedio DXIL (DirectX Intermediate Language) in rappresentazioni SPIR-V e istruzioni assembler per gli shader Direct3D.
- In HLSL è stato aggiunto il supporto per i profili "fx_2_0", "fx_4_0", "fx_4_1" e "fx_5_0", implementate le funzioni incorporate acos(), asin(), atan() e atan2(), e fornito supporto per le risorse "Buffer".
- È stata aggiunta un'ottimizzazione che esegue l'aggiornamento dei descrittori in modalità asincrona, il che può portare a un'accelerazione delle applicazioni che aggiornano un gran numero di descrittori in ogni fotogramma.
- È stato garantito l'uso delle estensioni Vulkan VK_EXT_mutable_descriptor_type e VK_EXT_shader_viewport_index_layer per migliorare l'efficienza nella gestione del pool di descrittori e accelerare il rendering di array di shader di vertici e tessellatori.
- Aggiunta la supporto delle interfacce ID3D12Device7 e ID3D12Resource2. È stato aggiunto il metodo GetResourceAllocationInfo1() all'interfaccia ID3D12Device4.
- Aggiunto il supporto per le interfacce D3DReflect() e D3DDisassemble().
- Implementate le richieste di controllo D3D12_FEATURE_D3D12_OPTIONS6, D3D12_FEATURE_D3D12_OPTIONS7, D3D12_FEATURE_D3D12_OPTIONS8, D3D12_FEATURE_D3D12_OPTIONS9, D3D12_FEATURE_D3D12_OPTIONS10, D3D12_FEATURE_D3D12_OPTIONS11, D3D12_FEATURE_D3D12_OPTIONS12, D3D12_FEATURE_D3D12_OPTIONS13.
- Aggiunte nuove opzioni di compilazione: VKD3D_SHADER_COMPILE_OPTION_FEATURE, VKD3D_SHADER_COMPILE_OPTION_FEATURE_INT64, VKD3D_SHADER_COMPILE_OPTION_FEATURE_FLOAT64, VKD3D_SHADER_API_VERSION_1_10 e VKD3D_SHADER_SPIRV_EXTENSION_EXT_VIEWPORT_INDEX_LAYER.
- Nelle funzioni D3D12CreateDeviceVKD3D() e D3D12CreateDevice() sono state coinvolte le estensioni Vulkan VK_KHR_android_surface, VK_KHR_wayland_surface, VK_KHR_win32_surface, VK_KHR_xlib_surface, VK_EXT_metal_surface e VK_MVK_ios_surface.
Fonte: opennet.ru
