Skip to content

DXVK-Sarek 1.12.0 "Late Anniversary" Released

Choose a tag to compare

@pythonlover02 pythonlover02 released this 16 Apr 07:55
· 231 commits to main since this release
89f76cd

Unofficial DXVK 1.10.x Build:

This is not an "official" build created by doitsujin/ドイツ人 (Philip Rebohle), the developer of DXVK.
Instead, it is an unofficial continuation of the 1.10.x branch designed to assist users still relying on the 1.10.x releases by backporting per game configurations, fixes and a little more.

Credits:

Full credit goes to doitsujin/ドイツ人 (Philip Rebohle) and everyone that have worked on the dxvk project. You can find the original DXVK repository here: dxvk.

Also, huge thanks to @WinterSnowfall (the d7vk developer), as his work made it possible to bring D3D3, 5, 6 and 7 support to DXVK-Sarek.

The "Name":

"Late Anniversary", it comes from the fact that this release was originally planned as 1.11.1, but as time passed i decided to keep working on it and turn it into a bigger release instead. It ended up taking way longer than expected, hence the "late anniversary" :).

Contributors:

@pythonlover02
@WinterSnowfall
@zeyadadev
@UMU618

Changelog:

This release brings two major additions: dyasync (Dynamic Asynchronous Pipeline Compilation, replacing the old async patch) and the port of d7vk, which adds D3D3, 5, 6 and 7 support to DXVK-Sarek. On top of that, a huge amount of upstream fixes and backports have been integrated, so a lot more games should now run better (or at all) under DXVK-Sarek. As always, feel free to try your fav games and report anything that doesn't work :).

  • [d3d7] Port d7vk to DXVK-Sarek (#38)
  • [d3d7] Backport latest d7vk features (#39)
  • [d3d8] Backport latest upstream d3d8 fixes (#20)
  • [d3d8/9] Backport upstream fixes and optimizations
  • [d3d8] Backport ZBIAS precision fix, UB shifts, cast safety and member init fixes
  • [d3d9] Disable instancing for non-indexed draws
  • [d3d9] Use drawInfo.vertexCount instead of vertexCount
  • [d3d9] Clamp stage and type in [G,S]etTextureStageState
  • [d3d9] Avoid depth degenerate viewports
  • [d3d9] Saturate viewport depth range
  • [d3d9] Only apply viewport zBias if minZ is below 0.5
  • [d3d9] Return empty buffer slice for out-of-bounds offsets
  • [d3d9] Fix off-by-one when copying shader defined constants
  • [d3d9] Fail GetRTData if src and dst have mismatching sizes
  • [d3d9] Only upload mip 0 of managed automipgen textures
  • [d3d9] Only set initial NeedsUpload for D3DPOOL_MANAGED textures
  • [d3d9] Only enable ATOC when rendering to MS RT
  • [d3d9] Do not support cube textures with depth formats
  • [d3d9] Fix ordinal values in the DEF file
  • [d3d9] Don't clear mipGenBit if texture is bound as attachment
  • [d3d9] Fix barriers with staging buffers
  • [d3d9] Fix spec constant derp
  • [d3d9] Fix recording MultiplyTransform
  • [d3d9] Gate clip distance emission on Vulkan feature support
  • [d3d9,dxso] Fix push constant validation errors
  • [d3d9/d3d11] Backport validation fixes, early-outs and format/sampler compatibility fixes
  • [d3d9/11] Make more features optional on the project
  • [d3d9] Remove the FF shaders (no longer needed after the d7vk port cleanup)
  • [d3d11] Shared texture flags handling fixes
  • [d3d11] Fix error return on MAP_WRITE_NO_OVERWRITE on deferred context
  • [d3d11] Do not touch row/depth pitch on failed map
  • [d3d11] Fix MiscFlags check in GetDescFromResource
  • [dxgi] Unchain DxgiSwapChain::Present1 and Present
  • [dxgi] Unchain DxgiFactory::CreateSwapChain and CreateSwapChainForHwnd
  • [dxgi] Backport VRAM reporting fixes, float bpp correction and const refactors
  • [dxvk] Keep more empty system memory chunks alive
  • [dxvk] Fix xfb counter buffer draw tracking
  • [dxvk] Add dyasync (Dynamic Asynchronous Pipeline Compilation)
  • [dxvk] Rework dyasync internals, faster lookups and smarter workers
  • [dxvk] Replace mutex-based pipeline compilation with lock-free implementation (dyasync)
  • [dxvk] Backport default shader cache path logic from upstream DXVK
  • [dxvk] Fix isoline tessellation enum order
  • [dxvk] Fix bool bitwise AND in UMA check, backport FNV-1a hash and explicit constructors
  • [dxso] Don't assume 32 registers
  • [dxso] Clamp Exp when fast float emulation is enabled
  • [dxso] Backport NaN comparison fix, default inits and FLT_MAX portability fix
  • [dxbc] Fix Mali GPU black screen caused by unbound texture optimization (#36) (thanks @zeyadadev)
  • [dxbc] Disable clip/cull builtins when Vulkan features are off
  • [dxbc] Fix patch vertex count, remove debug logging, add sparse/ROV early-outs
  • [spirv] Use opFUnordNotEqual instead of opFOrdNotEqual
  • [spirv] Fix typo
  • [vulkan] Backport loader null-check, color space and debug enum printers
  • [util] Rewrite the thread wrapper again
  • [util, d3d9] Add support for arm64 and arm64ec
  • [util] Backport small fixes: force_inline, operator bool and div-by-zero guards
  • [util] Fix MSVC build
  • [util] Add upstream changes to the config file
  • [misc] Fix color error on Windows (thanks @UMU618)
  • [submodules] Update SPIR-V and Vulkan headers

Dyasync (Dynamic Asynchronous Pipeline Compilation):

Starting with this release, DXVK-Sarek includes dyasync, enabled by default. This replaces the traditional async patch and removes the need for separate async builds, so from now on there will be no more async-only or non-async releases, only a single unified build.

When a shader is encountered for the very first time, it must be compiled synchronously, this is unavoidable and may cause a brief stutter. However, every variant after that is handled differently. A variant is created whenever the game uses the same shaders with a different combination of fixed-function state (blend mode, depth test, cull mode, render pass, etc.), each unique combination counts as a new variant.

When a new variant is needed, dyasync does not stall the game to compile it. Instead, it grabs the closest already compiled pipeline for those same shaders (perhaps one compiled with different blend settings) and uses it as a placeholder while the correct variant builds in a background thread. Once the background compilation finishes, it silently swaps in the correct pipeline. This reduces stuttering and improves frametimes.

This approach is safer than the traditional async patch because something valid is always being rendered on screen, there are no invisible or missing objects. That said, during the brief placeholder period, minor visual inaccuracies are possible (e.g. slightly wrong blending). Use in multiplayer games at your own discretion.

Dyasync can be disabled by setting dxvk.enableDyasync = False in dxvk.conf, in the DXVK_CONFIG environment variable, or by using the environment variable DXVK_DISABLE_DYASYNC=1.

About Proton-Sarek:

Starting with this release, Proton-Sarek is officially discontinued. I want to be upfront about the reasoning so there are no doubts:

I currently work, go to university and take care of my little brothers from time to time, so I do not have a lot of free time, let alone time to dedicate to opensource projects (which I still really enjoy as a hobby). Keeping up with Proton upstream while also working on DXVK-Sarek and handling issues for both projects simply isn't sustainable for me anymore.

Thankfully, I'm on really good terms with the Proton-CachyOS developer. He's a good guy and, a while ago, already added DXVK-Sarek support since he has a laptop that needs it, so the integration was already done by the time I decided to drop Proton-Sarek. From now on, he will handle the Proton side of things and I will focus solely on DXVK-Sarek and my other small projects.

CachyOS is also one of the few distros that officially still supports some of the older drivers DXVK-Sarek targets, like nvidia-470 (available on the official servers). So it's genuinely a great fit.

Every change I made here had a reason, and dropping Proton-Sarek frees me up to keep improving DXVK-Sarek itself, as I'm already doing with dyasync.

That said, this is not a blanket "no" to other Proton builds. If Valve, GE, or anyone else wants to ship DXVK-Sarek in their releases, they'll have my full support on the DXVK-Sarek side of any issues that come up. I just wanted to drop the Proton part personally. For now, Proton-CachyOS is the only officially supported way to use DXVK-Sarek with Proton.

Using DXVK-Sarek with Proton-CachyOS:

To use DXVK-Sarek with Proton-CachyOS you have to add PROTON_DXVK_SAREK=1 and to also use the added D3D3, 5, 6 and 7 support PROTON_DXVK_SAREK=1 PROTON_D7VK_DDRAW=1.

Hope this clarifies things :)

Extras:

If you'd like to support my work in the FOSS community, you can do so by contributing to any of my projects or by donating.
Every contribution no matter the amount is greatly appreciated and helps keep these tools alive, maintained, and evolving.

ko-fi

That's all for now, thank you for using my projects! If you can, please consider donating, and as always, GLHF!

Release: