Confused on Steam Play and Proton? Be sure to check out our guide.
We do often include affiliate links to earn us some pennies. See more here.

VKD3D-Proton v2.14 is now available bringing various improvements to the Direct3D 12 to Vulkan layer that's used by Valve's Proton for running Windows games on Linux.

This is used directly by Proton so you don't need to do anything yourself for it on Steam Deck / Desktop Linux. Proton Experimental usually pulls in changes from it quite regularly, as does GE-Proton.

For new features there's a DXGI frame statistics implementation, a new global frame rate limiter, support for planar video formats like NV12, improved support for DLSS3 frame generation via dxvk-nvapi and a number of performance improvements included.

A bunch of game-specific improvements too for the likes of World of Warcraft, Final Fantasy XVI, Dragon Age: Veilguard, Helldivers 2, Star Wars: Outlaws, The First Descendant, Skull & Bones, Hunt: Showdown, Red Dead Redemption and others.


Pictured - The First Descendant

Full changelog, click me

Features

  • Implement DXGI frame statistics (exposed by DXVK DXGI).
  • Implement a global frame rate limiter (see VKD3D_FRAME_RATE or DXVK_FRAME_RATE).
    Also improves behavior of presentation with swap interval > 1 since we use frame limiter instead
    of duplicated presents now. Also allows support for full-screen frame rate targets in DXGI which normally would imply a mode change.
  • Implement support for planar video formats such as NV12.
  • Implement D24 depth bias correctly now on AMD when VK_EXT_depth_bias_control is supported.
  • Expose a new command interop interface that allows e.g. dxvk-nvapi to implement DLSS3 frame generation.
  • Use VK_KHR_compute_shader_derivatives when available.
  • Use VK_EXT_device_generated_commands when available. Expose execute indirect tier 1.1.
  • Implement GPU upload heap from latest AgilitySDKs. Allows explicit control over ReBAR instead of heuristic based hacks in games that use the new API.
  • Implement ID3DDestructionNotifier. Fixes some particular games that expect this to be supported.

Performance

  • Reduce some VRAM bloat on RDNA2 and 3 GPUs when VK_MESA_image_alignment_control is exposed.
  • Improve CPU overhead for games that query swapchain format support over and over.
  • Remove old heuristic that preferred 2 frames of latency depending on BufferCount used.
    The default on DXGI is 3, and using 2 caused some performance issues in various games with GPU starvation,
    especially on Deck. VKD3D_SWAPCHAIN_LATENCY_FRAMES is still available as an override to force a tighter default.
  • Rewrite queue submission logic to deal better with difficult submission patterns such as FSR3 3.1 Frame Generation.
    On implementations with only one graphics queue, vkd3d-proton will now attempt to do basic software scheduling of GPU work.
    This may regress GPU performance in some other cases and VKD3D_CONFIG=no_staggered_submit is a way to disable this code path.
    One particularly big improvement is FF XVI on RADV with FSR 3 frame-gen, with almost doubled performance in some cases.
    We are still awaiting a proper kernel-level fix for this problem to be fully resolved.
  • Rewrite queue submission logic to use fewer "dummy" wait/signal submissions.
    Works around pathological CPU overhead in amdgpu taking 20ms+ to submit work in some cases.
  • Rewrite queue submission logic for sparse updates to be more efficient.

Fixes and workarounds

  • Rework various multi-sampling queries to be more spec correct.
  • Workaround bugged MSAA behavior in World of Warcraft.
  • Workaround buggy/questionable use of ID3D12PipelineLibrary in FF XVI.
  • Always use native 16-bit integers for min16int. Fixes some real-world bugs where shaders expect min16int is always implemented as 16-bit.
  • Workaround game bug leading to GPU hang in Dragon Age: Veilguard on RADV.
  • Always emit proper floating-point environment modes in DXBC shaders. Fixes glitched eyes in Dragon Age: Veilguard on NV.
  • Fix potential use-after-free bug for some sparse resource update cases.
  • Correctly validate when application attempts to allocate a too large descriptor heap.
    Fixes Stalker 2 entering into undefined behavior.
  • A lot of misc fixes in dxil-spirv as usual.
  • Workaround broken amdgpu zerovram behavior on 6.10+ kernels. Fixes random extreme glitchiness in Helldivers 2 on AMD.
  • Workaround NV issue which lead to GPU hang when loading a save file in Star Wars: Outlaws.
  • Fix copying between BC <-> RGBA images in some cases.
  • Add workaround for a game bug in The First Descendant which lead to broken cubemap reflections in some cases.
  • Workaround Skull & Bones crashing on startup on NV GPUs by disabling Reflex support.
  • Workaround Hunt: Showdown missing precise qualifiers on vertex shaders, leading to glitched rendering.
  • Workaround poor CPU performance in Red Dead Redemption.

Misc / Debug

  • Add support for instruction_qa_checks. For deep debug, allows us to be notified when NaNs and Infs are generated in shaders.
    For internal QA use.
  • Add fine-grained control of QA behavior on a per-shader basis. For narrowing down issues.
  • Remove a bunch of old and obsolete workarounds for NV drivers. New cutoff is 535 series.
  • Bump exposed SDKVersion to 614 to match latest stable AgilitySDK.
  • Add an optional code path to support DXBC via the official dxilconv library.
    This code is not enabled in release builds,
    and is currently only intended as a path to take advantage of QA instrumentation for DXBC shaders.

See all the improvements in the changelog.

Article taken from GamingOnLinux.com.
4 Likes
About the author -
author picture
I am the owner of GamingOnLinux. After discovering Linux back in the days of Mandrake in 2003, I constantly checked on the progress of Linux until Ubuntu appeared on the scene and it helped me to really love it. You can reach me easily by emailing GamingOnLinux directly.
See more from me
3 comments

Tevur 2 hours ago
Great!
Is there a way to set DXVK_FRAME_RATE for everything everywhere all at once or have do I have to set the argument for every single game?
rhavenn 1 hour ago
Quoting: TevurGreat!
Is there a way to set DXVK_FRAME_RATE for everything everywhere all at once or have do I have to set the argument for every single game?

Assuming that's just your standard environment variable. Yeah, just set it in your shell's init config files.

For bash, personally, I would put it in: ~/.bash_aliases:
#DXVK FRAME RATE
export DXVK_FRAME_RATE='WHATEVERITSUPPOSEDTOBE'



You will need to log out and log back in for your whole environment to inherit that.


Last edited by rhavenn on 13 December 2024 at 4:33 pm UTC
mrdeathjr 52 minutes ago
In my case works with mesa 25 and wine 9.22





While you're here, please consider supporting GamingOnLinux on:

Reward Tiers: Patreon. Plain Donations: PayPal.

This ensures all of our main content remains totally free for everyone! Patreon supporters can also remove all adverts and sponsors! Supporting us helps bring good, fresh content. Without your continued support, we simply could not continue!

You can find even more ways to support us on this dedicated page any time. If you already are, thank you!
Login / Register


Or login with...
Sign in with Steam Sign in with Google
Social logins require cookies to stay logged in.