Patreon Logo Support us on Patreon to keep GamingOnLinux alive. This ensures all of our main content remains free for everyone. Just good, fresh content! Alternatively, you can donate through PayPal Logo PayPal. You can also buy games using our partner links for GOG and Humble Store.
We use affiliate links to earn us some pennies. Learn more.

You don't have to get left behind with gaming on Linux if you have an older GPU, thanks to projects like DXVK-Sarek keeping them alive.

This fork of DXVK (the Vulkan-based implementation of D3D8, 9, 10 and 11 for Linux / Wine), is aimed it those of you with GPUs that do not meet the Vulkan 1.3 requirement of the main DXVK / Proton. Giving you the benefit of various game upgrades and fixes from later DXVK versions but keeping it supported for older GPUs.

DXVK-Sarek v1.12.0 brings dyasync (Dynamic Asynchronous Pipeline Compilation, replacing the old async patch) and the port of D7VK, which adds Direct3D 3, 5, 6 and 7 support to DXVK-Sarek. Plus, lots of fixes from upstream DXVK for many more games to run so plenty to look forward to.

The GitHub release page explains dyasync in more detail:

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.

And, officially, Proton-Sarek has now been retired. This was their own special Proton build with DXVK-Sarek. Instead, they suggest using Proton-CachyOS which is supported.

Main changelog, click me
  • [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

As always, projects like this showcase the power of open source and how Linux has become a great platform for preservation to keep older hardware and gaming alive.

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
All posts need to follow our rules. Please hit the Report Flag icon on any post that breaks the rules or contains illegal / harmful content. Readers can also email us for any issues or concerns.
No comments yet!

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

Reward Tiers: Patreon Logo Patreon. Plain Donations: PayPal Logo 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