Il progetto Wine ha pubblicato il pacchetto vkd3d 1.13 con implementazione di Direct3D 12, funzionante 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 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 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 lo svolgimento dei cicli (loop unrolling, ottimizzazione che sostituisce le operazioni cicliche con diverse copie consecutive di codice per un utilizzo più efficace della cache del processore e per ridurre il branching).
- È stata aggiunta la supporto per il compilatore di effetti per alcuni oggetti di stato del quarto modello di shader.
- È stata garantita la supporto per i tipi del quarto modello di shader BlendState, ComputeShader, DomainShader, GeometryShader, HullShader, DepthStencilState e RasterizerState, oltre alle funzioni OMSetRenderTargets(), SetBlendState(), SetComputeShader(), SetDomainShader(), SetGeometryShader(), SetHullShader(), SetPixelShader(), SetVertexShader(), SetDepthStencilState() e SetRasterizerState().
- Nel compilatore di shader è stata implementata la supporto per l'analisi e la memorizzazione in vari formati dei valori di inizializzazione per variabili globali, parametri di funzioni e annotazioni.
- È stata aggiunta la supporto per lo spazio dei registri del modello di shader 5.1.
- Sono state implementate le funzioni integrate tex1D(), tex2D(), tex3D(), texCUBE(), asint(), f16tof32(), faceforward(), GetRenderTargetSampleCount(), rcp(), tex2Dbias(), tex1Dgrad(), tex2Dgrad(), tex3Dgrad() e texCUBEgrad().
- In libvkd3d è stata aggiunta l'interfaccia ID3D12CommandList6 e implementata la possibilità di creare texture la cui compressione avviene a livello di singoli blocchi (ad esempio, i blocchi di dimensioni 4×4 pixel vengono compressi separatamente).
- È stata aggiunta la supporto per la struttura vkd3d_shader_parameter_info e parametri VKD3D_SHADER_PARAMETER_DATA_TYPE_FLOAT32, VKD3D_SHADER_PARAMETER_NAME_ALPHA_TEST_FUNC, VKD3D_SHADER_PARAMETER_NAME_ALPHA_TEST_REF, VKD3D_SHADER_PARAMETER_NAME_FLAT_INTERPOLATION e VKD3D_SHADER_PARAMETER_TYPE_BUFFER.
Fonte: opennet.ru
