An unofficial workaround until CD PROJEKT RED or Valve fix this properly. As soon as the 5.0 executable sees Wine, it turns off Streamline (DLSS SR/RR, DLSS-G, Reflex), ray tracing, path tracing and FSR frame generation. Everything here brings them back.
Important
The exe patch script supports only bin/x64_dx12/witcher3.exe 5.0.0.1048522 (patch 5.01, 2026-10-08, Steam build 25773555, sha256 2df76539…b101), 5.0.0.1044392 (the 2026-10-01 5.00c hotfix, Steam build 25646871, sha256 9406eccc…fe51) and 5.0.0.1041720 (the 2026-09-29 "Remastered" release, Steam build 25575366, sha256 c272b2c2…c7e25). It picks the build by size, checks the sha256, and refuses anything else, so a future game update needs a script update. The GOG exe passed the same hash check in one report. Wineland and the sed one-liner don't depend on the build.
| You use | Do this | You get |
|---|---|---|
| Steam, any GPU | Proton Wineland 11.0-20260930 or newer, original exe | Everything, nothing to patch |
| Proton Experimental (2026-10-02 or newer) | The sed one-liner |
Everything |
| GE-Proton11-7 | The script | DLSS SR/RR, Reflex, DLSS-G. RT and path tracing also need a newer vkd3d-proton |
| AMD / Intel on another Proton | The script with --rt-only |
RT, path tracing, FSR FG |
| GOG through Heroic, or Lutris / Faugus | Wineland plus the manual step in #75 / #76 / #77, or the sed one-liner if that step doesn't stick (confirmed through Faugus by @micker) |
Everything |
| A laptop, or any PC with the iGPU enabled | Read Hybrid GPUs first |
"Everything" means DLSS SR/RR, Reflex and DLSS-G on NVIDIA (DLSS-G needs an RTX 40 or newer), plus ray tracing, path tracing and FSR frame generation on any GPU.
Contents: Wineland · Other Protons · Ray tracing · Troubleshooting · DLSS 5 NR · Notes · Under the hood
Tip
Proton Wineland 11.0-20260930 or newer (nanomatters' proton-cachyos) hides Wine from witcher3.exe only, through a per-game fix (HideWineExports for that exe). The game files stay untouched, so game updates do not break it. It also carries the vkd3d-proton fixes ray tracing needs (the BLAS size fix, tight alignment, the RADV shader fix) and turns NVAPI off on non-NVIDIA GPUs.
- Download the newest
proton-wineland-11.0-<date>-x86_64_v3.tar.xz(or thex86_64one for CPUs without AVX2) from the release page and extract it into~/.local/share/Steam/compatibilitytools.d/. As of 2026-10-05 that is 20261005, which also smooths out the frame pacing swings NVIDIA Reflex caused in this game. It is a regular Proton build, not tied to CachyOS. - Restart Steam, then pick it in The Witcher 3 → Properties → Compatibility.
- Use it with the original exe: if you patched it with the script, run
python3 w3_proton_patch.py --restorefirst (or Steam's "Verify integrity of game files").
- The per-game fix runs when Steam launches the game. Heroic, Lutris and Faugus need a manual step for now: #75, #76, #77.
- Tested here on 5.00c and 5.01 (RTX 4090, 615.71.09): with the unmodified exe, Streamline loads, DLSS SR/RR, DLSS-G and the RT options are all available. A session of over 15 minutes with path tracing and DLSS-G on ran with no hang and no Xid.
GE-Proton: a protonfix that hides Wine from this game automatically was merged on 2026-10-10 (umu-protonfixes#641), and GE's tree now also has a vkd3d-proton with #3308 and #3332, which the game needs once Wine is hidden. Both ship in the next GE-Proton after 11-7. Until then, GE-Proton11-7 needs one of the options below plus a newer vkd3d-proton.
From @Saancreed: rename the string the game looks up, so the lookup fails and every Wine check goes away at once.
cd "<Steam library>/steamapps/common/The Witcher 3/bin/x64_dx12"
sed -i s/wine_get_version/frog_get_version/ witcher3.exe- This behaves like
--rtbelow: DLSS, RT and the non-Wine buffer alignment are all exposed. So it needs a vkd3d-proton with #3308, or the game crashes at startup (GE-Proton11-7's does not have it), and the RT fixes before turning RT on. Proton Experimental has them since its 2026-10-02 update (vkd3d-proton44cf7c20, which includes #3332 and the dxil-spirv fix; if Steam hasn't updated it yet, the bleeding-edge beta has them too). A vkd3d-proton master build or nanomatters'wineland-11.0-20260930have them as well. - On AMD, also
PROTON_DISABLE_NVAPI=1on GE-Proton and other Protons that don't do it yet. Proton Experimental (since 2026-10-01) and Wineland already turn NVAPI off for this game when no NVIDIA driver is loaded. - It changes the exe, so the script then refuses it. Use one or the other; Steam's "Verify integrity of game files" undoes either.
Close the game first. Python 3, no dependencies.
python3 w3_proton_patch.py # NVIDIA: DLSS SR/RR, Reflex, DLSS-G (default Steam path)
python3 w3_proton_patch.py /path/to/witcher3.exe
python3 w3_proton_patch.py --rt # NVIDIA: the above + RT and path tracing
python3 w3_proton_patch.py --rt-only # AMD / Intel: RT, path tracing and FSR frame generation
python3 w3_proton_patch.py --dry-run # show the state, change nothing
python3 w3_proton_patch.py --restore # undo everything| GPU | Run | You get |
|---|---|---|
| NVIDIA | default | DLSS SR/RR, Reflex and DLSS-G. Nothing else needed |
| NVIDIA | --rt |
The above plus ray tracing and path tracing, which need a recent vkd3d-proton (below) |
| AMD / Intel | --rt-only |
Ray tracing, path tracing and FSR frame generation. On AMD, RT also needs the dxil-spirv fix (below) |
- The DLSS patches are NVIDIA only: with OptiScaler/fakenvapi they made the game exit in one report, so AMD and Intel use
--rt-only. - A copy of the original is saved once as
witcher3.exe.orig-<version>(e.g.witcher3.exe.orig-5.0.0.1044392). Steam's "Verify integrity of game files" also restores the original. - A game update replaces the exe and the offsets change. Run the script again only if it says the build is supported.
Then choose DLSS and Frame Generation in Options → Graphics.
HideWineExports=Y, or "Hide Wine version" in winecfg (proton-cachyos, wine-staging), hides Wine from the game entirely, which exposes DLSS and RT without touching the exe. It still needs a vkd3d-proton with #3308 and the RT fixes. With those it was reported working on NVIDIA in #3226 and on AMD (@drizzt, GOG version through Heroic).
- On proton-cachyos the per-app key did nothing and the global
HKCU\Software\Wine\HideWineExports=Yworked (@vharmash, RX 9070). Wineland's per-game fix uses the per-app key and works. - Older proton-cachyos builds crash with it because their lsteamclient lacks
SteamUtils011.
Patch 5.01 fixes a case where the game picked the wrong GPU, so try without the settings below first. With an integrated GPU enabled, the game's hardware detection can pick the iGPU instead of the dedicated one: Low preset, RT locked, settings that "revert", DLSS reported as not supported, and very low FPS. Found by @Soyalexf. Hide the iGPU from the game by pointing Vulkan at the dedicated GPU's driver only, in the launch options:
VK_DRIVER_FILES=/usr/share/vulkan/icd.d/nvidia_icd.json %command% # NVIDIA
VK_DRIVER_FILES=/usr/share/vulkan/icd.d/radeon_icd.json %command% # AMDOn NVIDIA laptops with PRIME offload, __NV_PRIME_RENDER_OFFLOAD=1 __VK_LAYER_NV_optimus=NVIDIA_only %command% does the same.
If none of that helps, turning the iGPU off in the BIOS (dGPU-only or MUX mode, on laptops that have it) takes it out of the picture entirely. That fixed the frame rate on an RTX 3050 laptop (@San10deep). DLSS still needs one of the fixes above to show up.
--rt, --rt-only, the one-liner and hiding Wine all clear the Wine flag, so RT and path tracing become selectable. What else is needed depends on the GPU.
Warning
NVIDIA, drivers 590 and newer: vkd3d-proton #3332 (by @Stanni97, merged 2026-09-30). Without it, RT hangs the GPU within about a minute (Xid 109 / VK_ERROR_DEVICE_LOST).
- The cause: vkd3d-proton's Witcher 3 workaround asked for BLAS sizes with
ALLOW_UPDATEforced on. On NVIDIA that reports up to ~5x less build scratch than BLAS built without it actually use. - Tested here on 5.0 (RTX 4090, 615.71.09) with vkd3d-proton master
4d06d745plus #3332, nothing else: about 29 minutes, ~17 with RT and ~12 with path tracing, DLSS RR and DLSS-G on. No hang, and zeroregister_rtas_scratch_rangewarnings.
Warning
AMD (RADV): dxil-spirv PR #311 (by @drizzt, merged 2026-09-30 and in vkd3d-proton master). Without it, RADV crashes in vkCreateRayTracingPipelinesKHR while the game loads, because one of the game's path-tracing shaders translates to invalid SPIR-V (Mesa #16450).
With it, RT was reported working on a Radeon 7900X (@drizzt), and with #3332 as well on an RX 6800 XT, ~20 minutes stable (@Soyalexf). @Soyalexf's scripts for AMD: https://github.com/Soyalexf/witcher3-rt-amd-proton
Note
No build needed on Proton Experimental or Wineland. Proton Experimental has both fixes since its 2026-10-02 update (if yours is older: Steam → Library → Tools → Proton Experimental → Properties → Betas → bleeding-edge), and so does nanomatters' wineland-11.0-20260930. On another Proton, build vkd3d-proton master as below.
Step by step: vkd3d-proton master (about 10 minutes, for GE-Proton and other Protons)
Most of the time is the build. Close Steam first. The commands are bash: on fish or another shell, run bash first.
# 1. Build tools
sudo pacman -S --needed git meson ninja glslang mingw-w64-gcc wine # Arch, CachyOS
# sudo apt install git meson ninja-build glslang-tools mingw-w64 mingw-w64-tools # Debian, Ubuntu
# 2. vkd3d-proton master (it already has #3332, #3308 and the dxil-spirv fix for AMD)
cd ~
git clone --recursive https://github.com/HansKristian-Work/vkd3d-proton.git
cd vkd3d-proton
# 3. Build (64-bit is all this game needs)
meson setup build --cross-file build-win64.txt --buildtype release -Dstrip=true
ninja -C build
# 4. A copy of your Proton with the new DLLs.
# P = your GE-Proton folder name in compatibilitytools.d (it may be GE-Proton11-7 or GE-Proton11-7-x86_64)
cd ~/.local/share/Steam/compatibilitytools.d
P=GE-Proton11-7
cp -a "$P" "$P-w3"
sed -i "s/\"$P\"/\"$P-w3\"/g" "$P-w3/compatibilitytool.vdf"
D="$P-w3/files/lib/wine/vkd3d-proton/x86_64-windows"
rm -f "$D/d3d12.dll" "$D/d3d12core.dll"
cp ~/vkd3d-proton/build/libs/d3d12/d3d12.dll ~/vkd3d-proton/build/libs/d3d12core/d3d12core.dll "$D/"- Start Steam. In The Witcher 3 → Properties → Compatibility, pick the new
...-w3entry. - Run
python3 w3_proton_patch.py --rt(NVIDIA) or--rt-only(AMD / Intel), then turn on ray tracing / path tracing in the game.
| Symptom | What to do |
|---|---|
| DLSS still greyed out after patching | Run once with PROTON_LOG=1 and check that sl.common.dll and sl.dlss.dll get loaded. If only sl.interposer.dll shows up, the exe that actually runs is not the patched one. With a plain Wine runner instead of Proton, also check that dxvk-nvapi is set up. |
| Crash at startup right after hiding Wine | The vkd3d-proton is older than #3308 (GE-Proton11-7's is). Use a newer one, or the script's --rt / --rt-only, which keep Wine's buffer alignment. |
Crash in Steam.dll at startup |
The remaster needs SteamUtils011, which older proton-cachyos builds (20260703) lack. With an outdated Steam client, recreating a missing ~/.local/share/Steam/steam/games folder let Steam update itself (@Patola). |
| Low preset, RT locked, DLSS "not supported", very low FPS | The game picked the iGPU: see Hybrid GPUs. |
GOG through Heroic: witcher3.exe runs with no window |
The GOG update leaves empty folders under content/ and dlc/, and the game hangs on them. From the game folder, find content dlc -depth -type d -empty -delete fixed it (Heroic #5941, confirmed by @Ritaku02). |
| Stutter while signed in to a CDPR account | While signed in, the game checks the connection about 10 times a second, and under Wine each check re-reads the stats of every network adapter; one slow NIC driver is enough (profiled by @ninele7 in Proton#607). Wineland 11.0-20261011 ships a fix for it. On other Protons, signing out of the CDPR account avoids it. |
| "Frozen" loading screen after dying | Under Proton, "Load last save" from the death screen can take 3–4 minutes, while the same save loads in seconds from the main menu. Reported on Steam Deck and desktop Linux, not on Windows; one report says Proton 11-02 cut it to ~30 s (Steam thread). For now, quit to the main menu and load from there. |
Random crash in menus with a live 3D scene (inventory, map, alchemy, character), witcher3.exe+0x3317E3 |
A race in the game itself, much more common under Wine. @p-valentin's fix patches it: for 5.00c, and for 5.01 (the same patch with the 5.01 addresses; @Snuffles20 crashed the unpatched 5.01 within minutes and not since). It needs the unmodified exe: on Wineland just run it; with the sed one-liner, apply it first and the sed after. It can't be combined with this gist's script. |
| AMD: crash with Mesa's anti-lag layer on | Add DISABLE_LAYER_MESA_ANTI_LAG=1 to the launch options (@vharmash). |
Once DLSS works in the game, you can add DLSS 5 Neural Rendering (NR) on top of it with OptiScaler. My own setup is in a kit: W3-DLSS-NR-kit-8f603d70.zip, with the OptiScaler_DLSSNR build 8f603d70, the NR model and my OptiScaler.ini. Tested on an RTX 4090 with path tracing, Ray Reconstruction and DLSS-G: 50–60 fps at 3440x1440 with DLSS Quality.
- Extract it into
bin/x64_dx12, next towitcher3.exe. If your NVIDIA driver isn't 615.71.09, replace_nvngx.dllwith your own:cp /usr/lib/nvidia/wine/_nvngx.dll <game>/bin/x64_dx12/. - Launch options:
WINEDLLOVERRIDES="dxgi=n,b" %command%. - In game, pick DLSS. F7 turns NR on and off, and Home opens the OptiScaler menu.
- The kit's ini already has
ApplyAfterRR=true. Without it, NR skips every frame while Ray Reconstruction is on. - In the tests published so far, NR costs around 30% of the frame rate with path tracing.
- If the GPU hangs (
Xid 109) only with NR on, reset any GPU overclock first. NR is much heavier than DLSS upscaling, and an overclock that was stable in other games hung here until it was reset (@tuxrinku). - If NR doesn't run,
OptiScaler.lognext to the exe says why: look for the lines starting withDLSS-NR. - Unofficial; single player only.
- Tested here on Linux with an RTX 4090. Reported working with DLSS on RTX 3060, 4060 Laptop, 4070, 4090, 5070 Ti and 5090, and with RT on AMD (Radeon 7900X, RX 6800 XT, RX 7900 XTX, RX 9070). DLSS-G needs an RTX 40 or newer.
- HairWorks works under Proton. It is built into the DX12 exe, and the
NVHair*.dll/GFSDK_HairWorksfiles next to it are not used, so their absence from aPROTON_LOGmeans nothing. Every graphics preset, RT ones included, turns it back off, so set it after choosing a preset. Path-traced hair stays unavailable: it needs Linear Swept Spheres, which NVIDIA lists for RTX 50 only and dxvk-nvapi does not report.
Caution
Modifying the executable may be against the game's EULA. It does not touch any DRM, only the platform check, and it is fully reversible.
Why DLSS is missing under Proton
The 5.0 executable asks ntdll for wine_get_version. When it finds it (Wine/Proton), the game does three things:
- Skips NVIDIA Streamline entirely. It never calls
slInit, so DLSS Super Resolution, Ray Reconstruction, DLSS Frame Generation and Reflex are all reported as unsupported. - Sets a cached "Wine or Steam hardware" flag. That flag forces DLSS-G unsupported, zeroes the ray tracing capability (all RT and path tracing options greyed out), skips the path-tracing shaders, disables FSR frame generation, and changes buffer alignment.
- Nothing else. It is not the NVAPI IDs or the
D3DKMTQueryAdapterInfotype 31 queries seen in the logs.
Root-cause details: ValveSoftware/Proton#607. RT hang details: HansKristian-Work/vkd3d-proton#3226.
Patches (file offsets)
| 5.0.0.1041720 | 5.0.0.1044392 (5.00c) | 5.0.0.1048522 (5.01) | Original → new | Effect |
|---|---|---|---|---|
0x1B709CB |
0x1B7169B |
0x1B77ECB |
75 42 → 90 90 |
Default and --rt: creates the Streamline manager under Wine (DLSS SR/RR, Reflex) |
0x1B759A0 |
0x1B76620 |
0x1B7CE30 |
74 → EB |
Default and --rt: DLSS-G support comes from Streamline instead of the Wine flag |
0x1EE2A53 |
0x1EDE8F3 |
0x1EE4C33 |
75 0B → 90 90 |
--rt, --rt-only: the Wine flag no longer set (RT, path tracing, FSR FG) |
0x1EE09F7 |
0x1EDC897 |
0x1EE2BD7 |
75 → EB |
--rt, --rt-only: keep Wine's buffer alignment (needed only on vkd3d-proton older than #3308) |
0x106E0D |
— | — | 20 00 00 00 → 00 01 00 00 |
Old --rt only, no longer applied: RT BLAS scratch default 32 → 256 MiB |
@d1g1talpump found the 5.00c offsets first, in a fork of this gist that is no longer online. The offsets were checked independently here before being added. The 5.01 offsets were found here and checked in game on Proton Experimental (RTX 4090): DLSS SR/RR, DLSS-G, RT and path tracing all available.
Buffer alignment, and what was superseded
Both RT options also keep the buffer alignment behaviour Wine gets. That is only needed on vkd3d-proton older than #3308, such as the one in GE-Proton11-7: there, clearing the flag alone makes the game request tight-aligned 256-byte buffers, which get rejected, and the game crashes within seconds. On newer builds it is harmless.
Superseded: vkd3d-rtas-prebuild-x8.patch in this gist (×8 prebuild sizes) and the game-side scratch buffer 32 → 256 MiB. Both were stopgaps before the cause was known; #3332 alone is enough. The script published on 2026-09-29 still applied the scratch patch with --rt by mistake. It is harmless (it was the earlier stable setup, and costs ~224 MiB of VRAM); running --rt again with the current script takes it out, and --restore undoes it too.
@Twi-Hard similar setup here: 4090, 3440x1440, i9-13900K, 32 GB RAM, driver 615.71.09, Arch, Wineland. With path tracing, DLSS Quality + Ray Reconstruction and DLSS-G 2x I get roughly 50-60 fps on screen (25-31 rendered), and that's with DLSS 5 Neural Rendering running on top through my OptiScaler fork, which costs some GPU time as well. So it's playable here, though the base framerate is on the low side for frame gen.
What numbers do you get, and on which DLSS mode? With path tracing, going from Quality to Balanced or Performance is the biggest lever. I don't have Windows numbers for this machine, so I can't say how big the Linux gap is. If you do have a Windows comparison with numbers, that would be worth reporting to vkd3d-proton.