What changed in DXVK from 2 to 3
4 releases numbered after v2.7.1 up to and including v3.1, stable releases only. v2.7.1 and v3.1 are the newest stable releases of 2 and 3 we track; this page follows them as new ones ship.
- 1 removes or deprecates something
55 changes across 4 releases
- Implement basic support for DXGI present parameters with VK_KHR_incremental_present extension to forward dirty rectangles to Vulkan
- Implement support for creating render target views on buffers directly for D3D11
- Load Intel-specific extension libraries when using an Intel GPU
- Add dxvk.enableNvCudaInterop configuration option to allow users to disable VK_NVX_* extensions
- Add DXVK_DEBUG=hang environment variable to help diagnose GPU hangs and driver crashes resulting in VK_ERROR_DEVICE_LOST errors
- DXVK's shader intermediate representation is now cached on disk inside the AppData/Local directory of the current Wine prefix, configurable via the DXVK_SHADER_CACHE_PATH environment variable
- Shader Model 1-3 support for D3D9
- D3D11 Class Linkage feature is now supported
- Improve compatibility with external overlays that hook specific DXGI entry points
- More aggressively optimize render areas in render passes to the actual rendered image region on tiling GPUs
- Disabled secondary command buffer usage on all desktop GPUs to reduce rendering issues and GPU hangs
- Improved GPU synchronization around stream output
- Enabled 60 FPS limit in Manhunt to work around game issues
- Enabled descriptor buffers on Intel Alchemist GPUs and older by default to work around ANV driver issue that may lead to GPU hangs in D3D9 games
- DXVK now uses dxbc-spirv for shader compilation, replacing the legacy shader translation code for all supported shader models
- Generated shader code is now more compact, substantially reducing DXVK's memory footprint by around 1 GiB in games such as Overwatch and God of War
- Shader compilation is now fully offloaded to worker threads, reducing start-up time and stutter in games such as Days Gone and Final Fantasy XIV
- VK_EXT_descriptor_heap extension is now used by default on drivers that support it
- D3D9 fixed-function pipeline is now implemented as a pair of ubershaders with optimized variants compiled in the background
- Various types of buffers are now uploaded on demand with memory in-flight limiting, fixing address space-related crashes in 32-bit D3D9 games
- Shared resources now work on Wine's upstream implementation without requiring Proton-specific patches
- VK_EXT_border_color_swizzle is now used to fix border color behaviour for various emulated D3D9 texture formats
- Reduced unnecessary GPU synchronization to allow overlapping multiple independent render passes and render passes with compute shaders
- The asynchronous transfer queue is now used more aggressively to perform resource uploads into VRAM
- Fix D3D9 fog regression that broke rendering in Mabinogi, The Witcher 1 and other games
- Fix crash when applications try to compile shaders that can only work with D3D12
- Work around out-of-memory crash on Nvidia GPUs with descriptor heaps enabled
- Fix Ghost Recon Breakpoint issue where pipeline state would not be set up properly for a specific shader
- Fix Ghost Recon Breakpoint water misrendering on Nvidia GPUs
- Fix Mirrors Edge Vulkan validation errors
- Fix RaceRoom Racing Experience web-based UI rendering issue on Proton 11
- Work around performance regression in games that create a new DXGI factory every single frame, affecting Dying Light: The Beast with FSR enabled and potentially other D3D12 games
- Fix spurious GPU hangs on Nvidia in Granblue Fantasy Relink, which may affect other games
- Work around game bug in Halo CE causing rendering issues
- Fix potential swapchain issue in Overwatch when running at non-native resolutions
- Work around game bug in Splinter Cell: Chaos Theory that would cause night vision to misrender
- Fixed a rendering regression affecting D3D9 games including Black Mesa, Gothic 3 and GTA IV on some drivers
- Fixed a crash when games unload D3D libraries while the D3D device is still alive
- Fixed an issue that would cause stuttering on 32-bit Nvidia drivers with descriptor heaps enabled
- Worked around a Windows-specific issue where sampler creation would fail on Nvidia
- Worked around a Windows-specific Intel driver bug that would cause all games to hang after a short time with graphics pipeline libraries enabled
- Fixed Empire Earth 2 regression where certain fixed-function setups were not handled correctly
- Fixed Fallout 3 shader compiler regression that would cause rendering issues with MSAA
- Fixed long-standing Fruit Ninja lighting issue
- Fixed Kane & Lynch: Dead Men severe performance regression
- Fixed King's Bounty: The Legend performance regression
- Fixed Splinter Cell 3 rendering regression when enabling the Shader Model 3.0 option
- Fixed Total War: Medieval II water rendering regression
- Fixed rendering issues in games caused by games relying on undefined behaviour or FXC generating invalid code, as seen in Postal: Brain Damaged and Snowrunner
- Fixed stuttering in games such as Unreal Tournament 2004 caused by on-the-fly fixed-function shader generation
- The D3DRS_MULTISAMPLEANTIALIAS render state now works correctly to allow single-sampled rasterization while rendering to multisampled render targets, fixing UI rendering issues in Anno 1701 and Men of War Assault Squad
- Fixed various issues with software vertex processing in D3D8/9, including in Vietcong and The I of the Dragon
- Fixed incorrect D3D8/9 fixed-function fog calculations affecting Sea Dogs
- Removed the DXVK_FRAME_RATE environment variable for frame rate limiting; users should use external limiters such as Gamescope or Mangohud instead
- The descriptor buffer path introduced in DXVK 2.7 is deprecated and will be removed in a future release
Original release notes, newest first
The list above is our reading of these notes; the originals from Philip Rebohle are here, one fold per release.
v3.1Version 3.1
Feature support
DXGI incremental presentation
Added basic support for DXGI present parameters. This fixes UI rendering issues in VirtualDJ (#5853), and is also used by various game launchers, such as Ubisoft Connect.
If supported by the driver, VK_KHR_incremental_present is leveraged to forward dirty rectangles to Vulkan, which may reduce the amount of work the compositor has to do, but is not guaranteed to do so.
D3D11 buffer render targets
Implemented support for creating render target views on buffers directly. This is primarily used by various older Frostbite engine titles, including Battlefield 3 where it fixes a long-standing issue with clouds misrendering in some situations (#5857).
Note: This feature is emulated by creating a 1D texture internally. It is not meant to be performant.
Intel vendor extensions
Intel-specific extension libraries are now loaded when using an Intel GPU, which is a requirement for Proton to support Intel vendor extensions for D3D11 in the future. This will work similarly to AMDAGS and NVAPI extensions that are already supported.
Bug fixes and Improvements
- Improved compatibility with some external overlays that hook specific DXGI entry points (PR #5846, PR #5851).
- Render areas in render passes are more aggressively optimized to the actual rendered image region on tiling GPUs.
- Fixed a D3D9 fog regression that broke rendering in Mabinogi, The Witcher 1 and potentially other games. (#5804, #5808)
- Fixed a crash when applications try to compile shaders that can only work with D3D12.
- Worked around a specific type of out-of-memory crash on Nvidia GPUs with descriptor heaps enabled. (#5855)
Additionally, added
dxvk.enableNvCudaInteropconfiguration option so users can explicitly disableVK_NVX_*extensions. This may be helpful for troubleshooting similar out-of-memory errors, but disables DLSS support. - Ghost Recon Breakpoint: Fixed an issue where pipeline state would not be set up properly for a specific shader. Also fixed an issue with water misrendering on Nvidia GPUs. (#5849, https://github.com/doitsujin/dxbc-spirv/pull/92)
- Mirrors Edge: Fixed some Vulkan validation errors. (#5826)
- RaceRoom Racing Experience: Fixed an issue where the web-based UI wouldn't render properly on Proton 11.
v3.0.2Version 3.0.2
Hang debugging
In case of a GPU hang or driver crash resulting in VK_ERROR_DEVICE_LOST errors, the environment variable DXVK_DEBUG=hang can now be used to help narrow down the crash location. Resulting log files may provide useful information in bug reports. This works best on AMD and Nvidia GPUs. See PR #5790 for details.
Bug fixes and Improvements
- Worked around a performance regression in games that create a new DXGI factory every single frame. This affects Dying Light: The Beast with FSR enabled, and potentially other D3D12 games.
- Granblue Fantasy Relink: Fixed spurious GPU hangs on Nvidia, may affect other games. (#5785)
- Halo CE: Worked around a game bug causing rendering issues. (PR #5783)
- Overwatch: Fixed potential swapchain issue when running at non-native resolutions. (PR #5794)
- Splinter Cell: Chaos Theory: Worked around a game bug that would cause night vision to misrender. (#5780)
Note
Some Antivirus software has falsely started flagging DXVK recently, especially any 32-bit binaries, see VirusTotal report.
v3.0.1Version 3.0.1
Bug fixes and Improvements
- Disabled secondary command buffer usage on all desktop GPUs. This may slightly impact performance in a small number of games with suboptimal MSAA resolve patterns, but has been a constant source of hard-to-debug rendering issues and GPU hangs, and the main benefits are only seen on tiling GPUs anyway.
- Fixed a rendering regression affecting numerous D3D9 games (including Black Mesa, Gothic 3 and GTA IV) on some drivers. (#5732, #5768)
- Fixed a crash when games unload D3D libraries while the D3D device is still alive. (#5743)
- Fixed an issue that would cause stuttering on 32-bit Nvidia drivers with descriptor heaps enabled.
- Improved GPU synchronization around stream output. This may affect older Unity Engine games using D3D11.
- Worked around a Windows-specific issue where sampler creation would fail on Nvidia. (#5744) Note: The root cause is not known, but may be linked to external overlays.
- Worked around a Windows-specific Intel driver bug that would cause all games to hang after a short time with graphics pipeline libraries enabled. (#5742, #5756, PR #5757)
- Empire Earth 2: Fixed a regression where certain fixed-function setups were not handled correctly. (#5730)
- Fallout 3: Fixed shader compiler regression that would cause rendering issues with MSAA. (#5758)
- Fruit Ninja: Fixed long-standing lighting issue. (#2480, PR #5765)
- Kane & Lynch: Dead Men: Fixed severe performance regression. (#5638, PR #5764)
- King's Bounty: The Legend: Fixed performance regression. (PR #5764)
- Manhunt: Enabled 60 FPS limit to work around game issues. (PR #5760)
- Splinter Cell 3: Fixed a rendering regression when enabling the Shader Model 3.0 option. (#5754)
- Total War: Medieval II: Fixed a water rendering regression. (#5763)
Note: An ANV driver issue was discovered that may lead to GPU hangs in some D3D9 games on Intel Alchemist GPUs and older (see Mesa issue and MR). As a workaround, DXVK now enables descriptor buffers on those GPUs by default, however this will negatively performance. Affected users are advised to keep graphics drivers up to date.
v3.0Version 3.0
Shader compiler changes
DXVK now uses dxbc-spirv for shader compilation, replacing the legacy shader translation code for all supported shader models. This fixes a number of issues that were previously impossible to address:
- Rendering issues in games that are caused either by games relying on undefined behaviour, or by FXC generating invalid code in some cases, as seen in Postal: Brain Damaged (#3488) and Snowrunner (see Mesa issue #13251).
- The generated code is more compact than naively translated SPIR-V, which substantially reduces DXVK's memory footprint. In games such as Overwatch or God of War, this can save around 1 GiB of system memory.
- Shader compilation is now fully offloaded to worker threads, which can reduce the start-up time in games such as Days Gone and Final Fantasy XIV, or reduce stutter in some cases. Previously, DXVK would perform the SPIR-V translation on the application thread and only compile the actual Vulkan pipelines on workers.
- DXVK's own intermediate representation of compiled shaders is now cached on disk inside the
AppData/Localdirectory of the current Wine prefix. This is necessary because compile times have increased compared to the old compiler. The cache path can be changed with the environment variableDXVK_SHADER_CACHE_PATH.
Shader Model 1-3 support for D3D9 was implemented by @K0bin.
Note: Outside of specific edge cases, the new compiler is not expected to improve overall performance.
For developers: When making changes to the shader compiler, set DXVK_SHADER_CACHE=0 to avoid loading stale shaders.
Descriptor heaps
The new Vulkan extension VK_EXT_descriptor_heap is now used by default on drivers that support it.
Compared to the older binding model implementation based on VK_EXT_descriptor_buffer, this new model is expected to achieve roughly the same level of CPU-bound performance, while reducing the GPU-bound performance penalty observed on Nvidia GPUs. The descriptor buffer path introduced in DXVK 2.7 is thus deprecated and will be removed in a future release.
Note: For Nvidia drivers, version 595.84 or newer is required for this feature to work. The feature is disabled on older drivers due to performance regressions. DXVK will print the log message info: Binding model: Descriptor heap if the extension is used.
D3D9 changes
Fixed-function pipeline
In order to emulate the legacy fixed-function pipeline that allows D3D8 and D3D9 games to perform rendering without shaders, DXVK previously generated its own shaders code on the fly based on pipeline state. In some games, such as Unreal Tournament 2004, this could lead to noticeable stuttering even after prolonged periods of gameplay.
To fix this, DXVK now implements the fixed-function pipeline as a pair of ubershaders, for which optimized variants are compiled in the background as the game sets up different fixed-function setups. For more details, see PR #5192.
Buffer upload optimizations
In order to more closely match Windows behaviour, various types of buffers that were previously placed directly in VRAM are now uploaded on demand, and a strategy was implemented to limit the amount of memory in flight, which fixes address space-related crashes in a number of 32-bit D3D9 games. See PR #5350 for details.
Note: These changees may also improve performance on systems without Resizeable BAR in games such as GTA IV.
Multisampling render state
On systems that sufficiently support VK_EXT_sample_locations and VK_EXT_extended_dynamic_state3, the D3DRS_MULTISAMPLEANTIALIAS render state now works correctly to allow apps to use single-sampled rasterization while rendering to multisampled render targets. This fixes UI rendering issues in Anno 1701 (#1415), Men of War Assault Squad (#4946), and similar issues in other games with MSAA enabled.
Other changes
Shared resources
Shared resources now work on Wine's upstream implementation, and no longer require Proton-specific patches. (PR #5257).
The legacy path will continue to work for the time being to not unnecessarily break older Proton versions, but will likely be dropped in a future release.
Frame rate limiter
The environment variable DXVK_FRAME_RATE to enable the built-in frame rate limiter was removed. Users are encouraged to use external limiters such as those of Gamescope or Mangohud instead, which will usually provide a smoother experience.
Users that wish to keep using the built-in limiter can use the configuration option dxvk.maxFrameRate = n.
Bug fixes and Improvements
- Fixed a number of minor Vulkan validation errors.
- Fixed various issues with software vertex processing in D3D8/9, including games such as Vietcong or The I of the Dragon. (PR #5656)
- Fixed incorrect D3D8/9 fixed-function fog calculations in some cases. This affects Sea Dogs. (#5165)
- If supported by the driver,
VK_EXT_border_color_swizzleis now used to fix border color behaviour for various emulated D3D9 texture formats. (#5388, PR #5390) - Reduced unnecessary GPU synchronization to allow overlapping mutliple independent render passes, as well as render passes with compute shaders. This is especially effective on systems that support
VK_KHR_unified_image_layouts, and can improve GPU-bound performance in games such as Dirt Rally 2. - The asynchronous transfer queue is now used more aggressively to perform resource uploads into VRAM. (PR #5713)
- The D3D11 Class Linkage feature is now supported. No games are known to use this feature, but some demo applications that do use it should work now.
- Optimized various common D3D9 code paths to reduce CPU overhead. This helps games such as Resident Evil 6.
- Optimized D3D9 shader constant uploads to reduce memory usage and improve performance. (PR #5686, #5689)
- DXVK will no longer spoof the vendor ID of Intel GPUs via DXGI for games shipping with XeSS 2. This spoofing was only necessary with older XeSS versions, but started causing issues with various D3D12 titles.
- Bioshock Infinite: Fixed a long-standing issue where the game would exhaust the sampler pool and start flickering. (PR #5376)
- Borderlands 2: Fix flickering grass when enabling anisotropic filtering. (#5441, PR #5549)
- Colin McRae Rally 3: Fix broken rendering with SilentPatch. (#4803, PR #5213)
- Fallout New Vegas: Fixed depth resolve issue with certain mods. (#5665)
- Insurgency & Counter-Strike: Global Offensive: Worked around engine bug causing missing textures. (PR #5602)
- Jump Space: Worked around a case of undefined behaviour that would lead to artifacting around objects in certain scenes.
- Max Payne: Fixed a crash when launching the game with more than one monitor connected. (PR #5221)
- Railroad Tycoon 3: Fixed Z-fighting issues on terrain. (#4114)
- Sang-Froid: Tales of Werewolves: Fixed various issues with fixed-function lighting.
- Splinter Cell 4: Worked around an issue where the game does not render correctly when it detects AMD GPUs. (#5729)
- The Sims 3: Worked around an issue where the game would deliberately lower shadow quality on AMD cards.
- Total War: Pharaoh: Worked around a game bug that would cause the main menu to flicker, and worked around a major performance issue that is caused by questionable shader code when MSAA is enabled. (PR #5517)
- Witch on the Holy Night: Fixed drop-down shadows in the gallery not displaying properly. (#3785)
- World of Final Fantasy: Worked around an issue where the game deliberately decides not to render water and certain character hair when detecting an AMD GPU.
Driver support
Many of the features and extensions added in Vulkan 1.4 are now required. In practice, this means that a driver recent enough to support Vulkan 1.4 is now also needed to run DXVK. The Driver Support page was updated accordingly.
This is not scary, just make sure your drivers aren't several years out of date.
RDNA1/2 on Windows
While this release will generally work, AMD's Windows driver for these GPUs no longer receives feature updates, can only use the slow legacy binding model, and suffers from severe performance issues that are not seen on any other driver. Affected users should stick to DXVK 2.x or consider moving to Linux.