After six months of development, a new version of DXVK (Direct3D to Vulkan Translation Layer) has been released. This open-source library converts Direct3D 8, 9, 10, and 11 API calls into Vulkan commands. It allows you to run 3D applications and games developed for Windows, on systems where native Direct3D support is absent, while taking advantage of the more efficient Vulkan graphics API.
Major changes
The new version has transitioned to the use of Vulkan 1.4 specifications and extensions, which will accordingly require compatible driver.
DXVK now uses dxbc-spirv to compile shaders for all supported shader models. This resolves a number of issues that were previously impossible to resolve:
Rendering issues in games, caused either by games relying on undefined behavior or by FXC generating invalid code in some cases, such as in Postal: Brain Damaged, Snowrunner
The generated code is more compact than simply converted SPIR-V code, significantly reducing the memory footprint of DXVK. In games like Overwatch or God of War, this saves approximately 1 GiB of system memory.
Shader compilation has now been completely moved to worker threads, which can improve startup times in games like Days Gone and Final Fantasy XIV, or reduce stuttering in some cases. Previously, DXVK performed SPIR-V translation in the application thread and compiled only the actual Vulkan pipelines in worker processes.
The intermediate representation of compiled DXVK shaders is now cached on disk within the AppData/Local directory of the current Wine prefix. This is necessary because compilation times have increased compared to the old compiler. The cache path can be changed using the DXVK_SHADER_CACHE_PATH environment variable.
The new Vulkan extension VK_EXT_descriptor_heap is now used by default in drivers that support it.
Compared to the old VK_EXT_descriptor_buffer based binding model implementation, this new model is expected to provide roughly the same level of CPU bound performance while avoiding the performance penalty on Nvidia GPUs (requires nvidia-drivers-595.84 and newer).
D3D9 Changes
To emulate the legacy fixed-function pipeline that allows D3D8 and D3D9 games to render without shaders, DXVK previously generated its own shader code on the fly based on the pipeline state. In some games, such as Unreal Tournament 2004, this could lead to noticeable stuttering even after extended periods of gameplay.
To fix this, DXVK now implements a fixed-function pipeline as a pair of ubershaders, for which optimized variants are compiled in the background.
Optimizing buffer loading
To more closely match the behavior Windows, various types of buffers that were previously placed directly in VRAM are now loaded on demand, and a RAM limiting strategy has been implemented that fixes address space related crashes in a number of 32-bit D3D9 games.
These changes may also improve performance on systems without resizable BARs in games like GTA IV.
On systems that sufficiently support VK_EXT_sample_locations and VK_EXT_extended_dynamic_state3, the D3DRS_MULTISAMPLEANTIALIAS rendering state now functions correctly, allowing applications to use single-sample rasterization when rendering to multi-sample render targets. This resolves UI rendering issues in Anno 1701, Men of War Assault Squad, and similar issues in other games with MSAA enabled.
Shared resources now work with the original Wine implementation and no longer require Proton-specific patches.
Also worth mentioning are a lot of fixes for various games that will now run better.
Source: linux.org.ru
