The Wine project has released version 1.11 of the vkd3d package, which implements Direct3D 12 through call translation to the Vulkan graphics API. The package includes the libvkd3d libraries with Direct3D 12 implementations, libvkd3d-shader with a translator for shader model 4 and 5, and libvkd3d-utils with functions for simplifying the porting of Direct3D 12 applications, as well as a set of demonstration examples, including the port of glxgears to Direct3D 12. The project's code is distributed under the LGPLv2.1 license.
The libvkd3d library supports most capabilities of Direct3D 12, including graphics and compute tools, queues and command lists, descriptors and heap descriptors, root signatures, unordered access, samplers, command signatures, root constants, indirect rendering, and Clear*() and Copy*() methods. The libvkd3d-shader implements the translation of bytecode from shader models 4 and 5 to an intermediate representation SPIR-V. It supports vertex, pixel, tessellation, compute, and simple geometry shaders, as well as serialization and deserialization of root signatures. Shader instructions include arithmetic, atomic, and bitwise operations, comparison operators, and flow control, along with sample, gather, load instructions, and unordered access operations (UAV, Unordered Access View).
In the new version:
- Initial support for compiling old Direct3D bytecode to SPIR-V intermediate representation has been added.
- Initial support for compiling Direct3D effect profiles ("fx_2_0", "fx_4_0", "fx_4_1", and "fx_5_0") has been added to the HLSL compiler.
- Experimental support for compiling the DXIL (DirectX Intermediate Language) intermediate language to SPIR-V representation and Direct3D shader assembly instructions has been added.
- Support for the "fx_2_0", "fx_4_0", "fx_4_1", and "fx_5_0" profiles has been added in HLSL, as well as built-in functions acos(), asin(), atan(), and atan2(), and support for "Buffer" resources has been implemented.
- An optimization has been added that performs asynchronous descriptor updates, which can speed up applications that update a large number of descriptors in each frame.
- Support for Vulkan extensions VK_EXT_mutable_descriptor_type and VK_EXT_shader_viewport_index_layer has been provided to improve efficiency when working with the descriptor pool and to accelerate rendering of vertex and tessellation shader arrays.
- Support for ID3D12Device7 and ID3D12Resource2 interfaces has been added. The GetResourceAllocationInfo1() method has been added to the ID3D12Device4 interface.
- Support for the D3DReflect() and D3DDisassemble() interfaces has been added.
- Validation queries for 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, and D3D12_FEATURE_D3D12_OPTIONS13 have been implemented.
- New build options have been added: VKD3D_SHADER_COMPILE_OPTION_FEATURE, VKD3D_SHADER_COMPILE_OPTION_FEATURE_INT64, VKD3D_SHADER_COMPILE_OPTION_FEATURE_FLOAT64, VKD3D_SHADER_API_VERSION_1_10, and VKD3D_SHADER_SPIRV_EXTENSION_EXT_VIEWPORT_INDEX_LAYER.
- Vulkan extensions VK_KHR_android_surface, VK_KHR_wayland_surface, VK_KHR_win32_surface, VK_KHR_xlib_surface, VK_EXT_metal_surface, and VK_MVK_ios_surface have been utilized in the D3D12CreateDeviceVKD3D() and D3D12CreateDevice() functions.
Source: opennet.ru
