Proiectul Wine a publicat versiunea pachetului vkd3d 1.11, care implementează Direct3D 12, funcționând prin translația apelurilor în API-ul grafic Vulkan. Pachetul include biblioteci libvkd3d care implementează Direct3D 12, libvkd3d-shader cu un translatore de modele de shader 4 și 5 și libvkd3d-utils cu funcții pentru simplificarea portării aplicațiilor Direct3D 12, precum și un set de exemple demo, inclusiv portul glxgears pe Direct3D 12. Codul proiectului este distribuit sub licența LGPLv2.1.
Biblioteca libvkd3d suportă majoritatea funcționalităților Direct3D 12, inclusiv instrumente pentru grafică și calcul, cozi și liste de comenzi, descriptorii și descriptorii de heap, semnăturile rădăcină, accesul nesortat, Sampler-e, semnăturile comenzii, constantele rădăcină, redarea indirectă, metodele Clear*() și Copy*(). În libvkd3d-shader este implementată traducerea codului byte pentru modelele de shader 4 și 5 în reprezentarea intermediară SPIR-V. Sunt suportate shader-ele de vârf, pe pixel, tesselație, calcul și geometrie simplă, serializarea și deserializarea semnăturii rădăcină. Dintre instrucțiunile shader-ului, sunt implementate operații aritmetice, atomice și bitwise, operatori de comparație și control al fluxului de date, instrucțiuni sample, gather și load, operații de acces nesortat (UAV, Unordered Access View).
În noua versiune:
- A fost adăugată suportul inițial pentru compilarea vechiului bytecode Direct3D în reprezentarea intermediară a shaderelor SPIR-V.
- Compilatorul HLSL a fost îmbogățit cu suportul inițial pentru compilarea profilurilor efectelor Direct3D („fx_2_0”, „fx_4_0”, „fx_4_1” și „fx_5_0”).
- A fost adăugată suport experimental pentru compilarea limbajului intermediar DXIL (DirectX Intermediate Language) în reprezentarea SPIR-V și instrucțiunile de asamblare pentru shaderele Direct3D.
- În HLSL a fost adăugat suportul pentru profilurile „fx_2_0”, „fx_4_0”, „fx_4_1” și „fx_5_0”, fiind implementate funcții încorporate precum acos(), asin(), atan() și atan2(), și asigurând suport pentru resurse „Buffer”.
- A fost adăugată o optimizare care efectuează actualizarea descriptorilor în mod asincron, ceea ce poate duce la accelerarea aplicațiilor care actualizează un număr mare de descriptorii în fiecare cadru.
- A fost asigurat utilizarea extensiilor Vulkan VK_EXT_mutable_descriptor_type și VK_EXT_shader_viewport_index_layer pentru a îmbunătăți eficiența în gestionarea pool-ului de descriptorii și pentru a accelera randarea array-urilor de shadere vertex și tesselation.
- A fost adăugat suportul pentru interfețele ID3D12Device7 și ID3D12Resource2. În interfața ID3D12Device4 a fost adăugată metoda GetResourceAllocationInfo1().
- A fost adăugat suportul pentru interfețele D3DReflect() și D3DDisassemble().
- Au fost implementate cereri de verificare 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.
- Au fost adăugate noi opțiuni de compilare: VKD3D_SHADER_COMPILE_OPTION_FEATURE, VKD3D_SHADER_COMPILE_OPTION_FEATURE_INT64, VKD3D_SHADER_COMPILE_OPTION_FEATURE_FLOAT64, VKD3D_SHADER_API_VERSION_1_10 și VKD3D_SHADER_SPIRV_EXTENSION_EXT_VIEWPORT_INDEX_LAYER.
- Extensiile Vulkan VK_KHR_android_surface, VK_KHR_wayland_surface, VK_KHR_win32_surface, VK_KHR_xlib_surface, VK_EXT_metal_surface și VK_MVK_ios_surface au fost implicate în funcțiile D3D12CreateDeviceVKD3D() și D3D12CreateDevice().
Sursa: opennet.ro
