Presentation improvements

If VK_KHR_present_wait is supported, and if vertical synchronization is enabled, frame latency events will now be signaled when an image is actually being presented, rather than when rendering work prior to the present request has completed on the GPU. This may reduce input latency in some games, also affects the dxgi.maxFrameLatency and d3d9.maxFrameLatency options.

This functionality is also used to more accurately report the number of frames actually presented via DXGI frame statistics.

Note: On some platforms and compositors, Vulkan present events may not correspond to the image actually being presented on screen, in which case frame latency is going to remain higher than expected.

Additionally, if VK_EXT_swapchain_maintenance1 is supported, enabling and disabling vertical synchronization may no longe require recreating the Vulkan swap chain, which works around severe performance issues in games which change their present interval on a per-frame basis.

Note: On Linux, this is currently only supported when running Gamescope with ENABLE_GAMESCOPE_WSI=1 set.

Configuration changes

The dxgi.nvapiHack config option was deprecated, and a new option dxgi.hideNvidiaGpu with a slight change in behaviour was added instead, alongside similar options for AMD and Intel GPUs. This allows implementing more targeted application workarounds for issues with e.g. XESS libraries in the future if necessary. Refer to the example configuration for more details.

Note: The old dxgi.nvapiHack option still works if dxgi.hideNvidiaGpu is not set, but will be removed in a future release.

Additionally, the dxgi.tearFree and d3d9.tearFree options were consolidated into a new dxvk.tearFree option, due to changes in the presentation logic. The old options were removed.

Bug fixes and Improvements

  • Configuration options can now be specified via an environment variable, DXVK_CONFIG. See the README for details (PR #3581).
  • If VK_EXT_depth_bias_control is supported, depth bias scaling will now be correct in most situations. This fixes shadow rendering artifacts in various D3D9 games and is especially important on GPUs that do not support 24-bit depth formats. This affects games such as F.E.A.R. (#1461), Far Cry 2 (#2941) and Assassin’s Creed Brotherhood (#2642).
  • If VK_EXT_line_rasterization and its relevant features are supported, smooth or rectangular lines will now be used if requested by the application. This functionality is generally not used by games, but may be useful for applications such as level editors.
  • If VK_KHR_maintenance5 is supported, DXGI_FORMAT_A8_UNORM images will now use the corresponding Vulkan format.
  • D3D9 command submission now works the same way as it does for D3D11, which will lead to more submissions but generally reduces resource readback latency. This may improve performance in games that frequently synchronize with the GPU.
  • Fixed a minor issue with D3D9 feedback loop tracking.
  • Fixed a minor issue with D3D11 stream output (#3634).
  • Fixed a bug and performance issues with the implementation of D3D11 tiled resources.
  • Fixed various issues with reporting HDR metadata.
  • Fixed a crash when compiling D3D9 shaders generated by the vkd3d HLSL compiler. (PR #3616)
  • Implemented keyed mutex synchronization on top of newly added winevulkan functionality (PR #3601, PR #3635). Note: This will only work with recent Proton builds.
  • Added stubs for various D3D9On12 interop interfaces. This is needed for Train Simulator Classic (#3445).
  • Added an interface to allow external libraries, such as NVAPI, to enable HDR in various D3D11 games as well as Elden Ring (PR #3625). Note: This will only work in combination with https://github.com/jp7677/dxvk-nvapi/commit/c3a1c48eebdef1d0f9f030ebd57e2c40625dc542 or newer. This will not work on Windows.
  • A Total War Saga: TROY: Fixed trees not rendering when MSAA is enabled.
  • Far Cry 2: Fixed crash when using D3D10.
  • Halo Online: Fixed water rendering. (#3594, PR: #3627)
  • Lara Croft and the Temple of Osiris: Fixed deadlock when using Exclusive Fullscreen (#3458).
  • RaceRoom Racing Experience: Fixed a crash when starting a race. (#3386, PR: #3389)
  • Spider Man: Shattered Dimensions: Fixed a regression that caused blocky shadows. (#3593, PR: #3624)
  • Test Drive Unlimited 2: Fixed shadows on grass. (#3469, PR: #3471)
  • The Sims 2: Fixed a regression in DXVK 2.2 that affected terrain rendering. (#3474, PR: #3476)
  • Titanfall: Fixed a crash caused by a miscompiled shader.
  • Tomb Raider Anniversary: Improved performance. (#3438, PR: #3439)