Skip to content

Instantly share code, notes, and snippets.

@larry0x
Created September 30, 2026 18:39
Show Gist options
  • Select an option

  • Save larry0x/72815ee92019f05146cc8cf0f032cf0b to your computer and use it in GitHub Desktop.

Select an option

Save larry0x/72815ee92019f05146cc8cf0f032cf0b to your computer and use it in GitHub Desktop.

Ray tracing in The Witcher 3 on Linux

Authored by: Claude Opus 5.5

This guide makes ray tracing work in The Witcher 3: Wild Hunt under Proton. It also brings back path tracing, DLSS, and frame generation. It covers version 5.0 of the game, the "Remastered" update released on 2026-09-29. It was written on 2026-09-30. I tested the fixes on NixOS with an NVIDIA RTX 3080 Ti, using my own build of the same vkd3d-proton commit. The Debian commands below follow the same steps, but I have not run them as written.

The steps assume a common distribution, such as Debian or Ubuntu, with Steam installed from the distribution's package. Paths for the Flatpak version of Steam differ, and I have not tested it.

The problem

In version 5.0, ray tracing does not work on Linux, whatever the GPU or driver:

  • You can switch ray tracing on in the graphics menu, and the game accepts it.
  • Nothing changes on screen.
  • When you open the menu again, ray tracing is back to off.
  • Path tracing, DLSS, and frame generation are missing or greyed out too. Geralt's hair may render wrong, because HairWorks uses the same path.

Version 4.0, the "next-gen" update from 2022, failed differently. The game froze the moment you switched ray tracing on. It stopped responding to input, and only kill could end it.

Root causes

Two separate faults are at work. Both hit every Linux setup.

1. The game turns ray tracing off when it sees Wine

At start, version 5.0 looks up the function wine_get_version in ntdll.dll. Only Wine has that function, so finding it means "running under Wine". The game then does five things:

  • it marks ray tracing and DXR 1.1 as unsupported, whatever the GPU reports;
  • it skips the path tracing shaders;
  • it skips NVIDIA Streamline, so DLSS, Ray Reconstruction, DLSS Frame Generation, and Reflex become unavailable;
  • it marks FSR frame generation as unsupported;
  • it skips a request for 256-byte buffer alignment.

This is a deliberate check in the game. It is not a driver or hardware limit. It explains why the menu setting goes back to off. The same check also fires on Steam hardware, such as the Steam Deck.

gabrielmaialva33 found this by static analysis of the game's executable, and confirmed it with a local test. The details are in Proton issue #607, in a comment from 2026-09-29.

2. vkd3d-proton fails once ray tracing is on

vkd3d-proton is the part of Proton that translates DirectX 12 to Vulkan. It had two bugs that this game hits:

  • Tight buffer alignment. With Wine hidden, the game asks for 256-byte buffer alignment. Older vkd3d-proton does not handle that, and the game crashes at start with Invalid alignment 256 for buffer resource. PR #3308 fixed it, merged on 2026-09-21.
  • Wrong acceleration structure sizes. The game queries acceleration structure sizes without a required flag. vkd3d-proton has a workaround for that, but on NVIDIA it under-reported the sizes by up to about 5×. The game's builds then overflowed into nearby memory, and the GPU hung (Xid 109, VK_ERROR_DEVICE_LOST) within about a minute. PR #3332 by Stanni97 fixed it, merged on 2026-09-30. The tracking issue is vkd3d-proton #3226.

The second bug is behind the freeze in version 4.0. It also explains why hiding Wine alone is not enough: the game then crashes or hangs.

Both fixes are in vkd3d-proton master. As of 2026-09-30, no vkd3d-proton release and no Proton release includes them.

Fixes

You need three things:

  1. GE-Proton, because it can hide Wine and Valve's Proton cannot.
  2. vkd3d-proton from master, placed inside a copy of GE-Proton.
  3. A protonfixes local fix that hides Wine from this one game.

The copy of GE-Proton gets its own name. Only The Witcher 3 uses it, so your other games keep stock GE-Proton.

Step 1: install a copy of GE-Proton

Download GE-Proton11-7-x86_64.tar.gz from the GE-Proton releases page. Then unpack it under a new name, and rename the tool inside its description file:

mkdir -p ~/.steam/steam/compatibilitytools.d
cd ~/.steam/steam/compatibilitytools.d
mkdir unpack
tar -C unpack -xf ~/Downloads/GE-Proton11-7-x86_64.tar.gz
mv unpack/* GE-Proton11-7-witcher3
rmdir unpack
sed -i 's/GE-Proton11-7[^"]*/GE-Proton11-7-witcher3/g' GE-Proton11-7-witcher3/compatibilitytool.vdf

The rename matters. Steam identifies each tool by the name in compatibilitytool.vdf. Without the rename, Steam treats this copy and a stock GE-Proton11-7 as the same tool.

Step 2: put vkd3d-proton master into the copy

vkd3d-proton's own CI builds every commit. The build of commit 44cf7c20 has both fixes, plus a follow-up to #3332.

  1. Open the CI run for that commit. You need to be signed in to GitHub to download.

  2. Download the artifact vkd3d-proton-master-44cf7c2042168f3b8ee37249f0a53ac091e48fd9. GitHub deletes it on 2026-12-29.

  3. Unpack it into ~/Downloads, and copy the two 64-bit DLLs into the copy of GE-Proton:

    cd ~/Downloads/vkd3d-proton-master-44cf7c2042168f3b8ee37249f0a53ac091e48fd9
    cp x64/d3d12.dll x64/d3d12core.dll \
      ~/.steam/steam/compatibilitytools.d/GE-Proton11-7-witcher3/files/lib/wine/vkd3d-proton/x86_64-windows/

The game is 64-bit only, so the 32-bit DLLs can stay as they are.

If the artifact has expired, build vkd3d-proton yourself. Its README lists the tools needed and has a one-line build script.

Step 3: hide Wine from the game

GE-Proton runs protonfixes before each launch. protonfixes also runs any "local fix" it finds in ~/.config/protonfixes/localfixes/, named after the game's Steam app ID. The Witcher 3's ID is 292030.

Create the local fix:

mkdir -p ~/.config/protonfixes/localfixes
cat > ~/.config/protonfixes/localfixes/292030.py <<'EOF'
r"""Game fix for The Witcher 3: Wild Hunt.

Hides Wine from the game, which otherwise turns off ray tracing,
path tracing, DLSS, and frame generation.
"""

from protonfixes import util


def main() -> None:
    """Turn on HideWineExports in the game's prefix."""
    util.protontricks("hidewineexports=enable")
EOF

The fix runs winetricks, which sets HKCU\Software\Wine\HideWineExports to Y in the game's prefix. That is a wine-staging setting, and GE-Proton includes wine-staging. winetricks records that it ran, so later launches skip it.

Step 4: select the tool and start the game

  1. Restart Steam.
  2. Open the game's Properties, then Compatibility.
  3. Tick "Force the use of a specific Steam Play compatibility tool", and pick GE-Proton11-7-witcher3.
  4. Start the game while online. protonfixes skips winetricks when it finds no internet connection.
  5. Switch ray tracing on, leave the menu, and open it again. The setting should stay on.

How to check it

To check that the fix ran, set the game's launch options to PROTON_LOG=1 %command%. Proton then writes ~/steam-292030.log. On the first launch, it should hold the line Using winetricks verb "hidewineexports=enable". Remove the launch option afterwards.

To check that the game uses the new vkd3d-proton, compare the DLL in the game's prefix with the one in the tool. After one launch, run:

cmp ~/.steam/steam/steamapps/compatdata/292030/pfx/drive_c/windows/system32/d3d12core.dll \
  ~/.steam/steam/compatibilitytools.d/GE-Proton11-7-witcher3/files/lib/wine/vkd3d-proton/x86_64-windows/d3d12core.dll

No output means the files match. If the game is installed in another Steam library, use that library's steamapps folder.

Known limits

  • AMD GPUs: with ray tracing on, RADV has crashed while it creates the ray tracing pipelines (Mesa #16450). This guide was tested on NVIDIA only.
  • Steam Deck: the game's check also asks Steam whether it runs on Steam hardware. Hiding Wine does not change that answer, so the check may still fire on a Steam Deck. gabrielmaialva33's patch script patches the check out of the executable instead. Steam's "Verify integrity" and every game update undo that patch.
  • Game updates: a new version of the game may move or change its checks.

After the fixes reach a release

Once a GE-Proton release ships vkd3d-proton from 2026-09-30 or later, you no longer need steps 1 and 2. GE-Proton release notes usually say which vkd3d-proton each release ships. Then:

  1. Install that GE-Proton release the normal way.
  2. Select it for The Witcher 3 in place of GE-Proton11-7-witcher3.
  3. Delete ~/.steam/steam/compatibilitytools.d/GE-Proton11-7-witcher3.
  4. Keep step 3, the local fix. It stays needed until one of the following happens:
    • the game stops checking for Wine;
    • protonfixes adds a fix for app 292030 itself. Other games' fixes there already use hidewineexports=enable;
    • Proton hides Wine from this game by itself.

Valve's own Proton will not do this soon. Valve's vkd3d-proton PR #3333, still open, would hide Wine from this game but report no ray tracing support. With it, DLSS would work under Valve's Proton, but ray tracing would stay off.

@nastye

nastye commented Oct 8, 2026

Copy link
Copy Markdown

RT has been working for me without further steps using the latest proton-cachyos release 11.0-20261005-slr.
https://github.com/CachyOS/proton-cachyos/releases/tag/cachyos-11.0-20261005-slr

@larry0x

larry0x commented Oct 9, 2026 •

Copy link
Copy Markdown
Author

RT has been working for me without further steps using the latest proton-cachyos release 11.0-20261005-slr. github.com/CachyOS/proton-cachyos/releases/tag/cachyos-11.0-20261005-slr

That is because proton-cachyos 11.0-20261005-slr ships the identical fix as described in my gist (hiding wine from the game, and the two vkd3d-proton PRs).

@nastye

nastye commented Oct 9, 2026

Copy link
Copy Markdown

I am mentioning it so people can just grab that instead of following your instructions.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment