dd86k's blog

Machine code enthusiast

Proton Configs

This is a living document of my Proton configurations for various games, as I tend to be a bit of a perfectionist.

Each entry contain a short description of issues and a list of past configurations, the last being the active one in my launch configuration. Every time the Proton runtime changes, it is put in parentheses and is the runtime used until a new runtime is mentioned. Unmarked (as the first config) meaning the default is used.

I have the Steam Overlay disabled, which causes mouse input lag roughly after 30-45 minutes (notably in HD2). Setting the LD_PRELOAD variable to an empty string fixes that, so it’s become a habit to put it everywhere.

I try to use “regular” builds Proton provided by Valve first, then fallback to GloriousEggroll (GE) builds if there is an issue.

My current setup is an Ubuntu 24.04 LTS based distribution using Linux 6.14 with the ntsync module loaded. Steam is installed natively, and I have the shader cache turned off globally, as it is a complete and utter waste of time.

WiVRn is installed as a Flatpak package, which is fine. Though. you might want to check for client updates before installing newer server packages.

Last updated: 2026-03-02

Table of Content

Abiotic Factor

Some animations play repeatedly (mouth opening in inventory). I’m assuming this is a timing issue. This config doesn’t fix it, and doesn’t need it as it plays fine as-is, so this is just a precaution.

Configs:

  1. (GE-Proton10-21) LD_PREFIX="" WINE_CPU_TOPOLOGY=8 WINESYNC=1 PROTON_USE_NTSYNC=1 %command%
  2. (Proton10.0-4) LD_PREFIX="" WINE_CPU_TOPOLOGY=8 WINESYNC=1 PROTON_USE_NTSYNC=1 %command%

Balatro

Force vsync for OpenGL game.

Configs:

  1. (Proton9.0-4) LD_PRELOAD="" vblank_mode=3 %command%

BeamNG.drive

The Linux port works pretty well. Using Vulkan only requires being patient when shaders are being built while the world loads. (Would enabling the cache forcefully help here?)

Configs:

  1. LD_PRELOAD="" gamemoderun ./BinLinux/BeamNG.drive.x64
  2. LD_PRELOAD="" gamemoderun ./BinLinux/BeamNG.drive.x64 -gfx vk

BONELAB

WINEDLLOVERRIDES="version=n,b" to enable mods.

Configs:

  1. LD_PRELOAD="" WINEDLLOVERRIDES="version=n,b" PRESSURE_VESSEL_IMPORT_OPENXR_1_RUNTIMES=1 PRESSURE_VESSEL_FILESYSTEMS_RW=/var/lib/flatpak/app/io.github.wivrn.wivrn %command%

Cities: Skylines

This is an example where the native build outshines the Windows build.

Yet, somehow, it tends to prefer software rendering, so, force it off.

Configs:

  1. LD_PRELOAD="" LIBGL_ALWAYS_SOFTWARE=0 ./Cities.x64

Deep Rock Galactic

Favourite game of all time. Runs perfectly when FPS is set to 120, 180, or 240.

Configs:

  1. (Proton9.0-4) LD_PRELOAD="" PROTON_USE_DXVK=1 PROTON_USE_ESYNC=1 PROTON_USE_FSYNC=1 %command%
  2. (Proton10.0-3) LD_PRELOAD="" PROTON_USE_DXVK=1 WINEFSYNC=1 PROTON_USE_FSYNC=1 %command%

Garry’s Mod

Weird one. If you do use the x86_64 branch, get GmodPatchTool NOW.

Source: https://developer.valvesoftware.com/wiki/Command_line_options

Configs:

  • LD_PRELOAD="" %command% +fps_max 120 -threads 6 -nohltv -console -swapcores -vulkan

Half-Life 2

Simple game. gamemoderun is just for show here, I guess.

Configs:

  1. gamemoderun %command% -novid -vulkan

Helldivers 2

Difficult game to run perfectly due to the game’s engine. Scales horribly with many cores.

Highly recommend the prod_slim branch.

Configs:

  1. (Proton9.0-4) radv_force_pstate_peak_gfx11_dgpu=false gamemoderun %command% -USEALLAVAILABLECORES --use-d3d11
  2. LD_PRELOAD="" radv_force_pstate_peak_gfx11_dgpu=false gamemoderun %command% -USEALLAVAILABLECORES -force-vulkan
  3. LD_PRELOAD="" gamemoderun env PROTON_ENABLE_NVAPI=1 PULSE_LATENCY_MSEC=120 %command% -force-vulkan -USEALLAVAILABLECORES
  4. LD_PRELOAD="" gamemoderun env PROTON_ENABLE_NVAPI=1 PULSE_LATENCY_MSEC=120 %command% -USEALLAVAILABLECORES
  5. LD_PRELOAD="" gamemoderun env PULSE_LATENCY_MSEC=120 %command% -USEALLAVAILABLECORES
  6. LD_PRELOAD="" radv_force_pstate_peak_gfx11_dgpu=false WINE_CPU_TOPOLOGY=8:4,6,8,10,12,14,16,18 VKD3D_CONFIG=nodxr VKD3D_FEATURE_LEVEL=12_2 PROTON_ENABLE_NVAPI=0 PROTON_ENABLE_NGX_UPDATER=0 gamemoderun %command% --use-d3d11 -force-vulkan -USEALLAVAILABLECORES --force-grab-cursor
  7. LD_PRELOAD="" radv_force_pstate_peak_gfx11_dgpu=false WINE_CPU_TOPOLOGY=8:4,6,8,10,12,14,16,18 VKD3D_CONFIG=nodxr VKD3D_FEATURE_LEVEL=12_2 PROTON_ENABLE_NVAPI=0 PROTON_ENABLE_NGX_UPDATER=0 DXVK_ENABLE_PIPECOMPILER=1 DXVK_STATE_CACHE=1 PROTON_HEAP_DELAY_FREE=1 gamemoderun %command% --use-d3d11 -force-vulkan -USEALLAVAILABLECORES --force-grab-cursor
  8. LD_PRELOAD="" radv_force_pstate_peak_gfx11_dgpu=false WINE_CPU_TOPOLOGY=8 VKD3D_CONFIG=nodxr VKD3D_FEATURE_LEVEL=12_2 PROTON_ENABLE_NVAPI=0 PROTON_ENABLE_NGX_UPDATER=0 DXVK_ENABLE_PIPECOMPILER=1 DXVK_STATE_CACHE=1 PROTON_HEAP_DELAY_FREE=1 DXVK_ASYNC=1 gamemoderun %command% --use-d3d11 -force-vulkan -USEALLAVAILABLECORES --force-grab-cursor
  9. (Proton10.0-3) LD_PRELOAD="" radv_force_pstate_peak_gfx11_dgpu=false WINE_CPU_TOPOLOGY=8 VKD3D_CONFIG=nodxr VKD3D_FEATURE_LEVEL=12_2 PROTON_ENABLE_NVAPI=0 PROTON_ENABLE_NGX_UPDATER=0 DXVK_ENABLE_PIPECOMPILER=1 DXVK_STATE_CACHE=1 PROTON_HEAP_DELAY_FREE=1 DXVK_ASYNC=1 WINESYNC=1 PROTON_USE_NTSYNC=1 gamemoderun %command% --use-d3d11 -force-vulkan -USEALLAVAILABLECORES --force-grab-cursor

Hot Dogs, Horseshoes & Hand Grenades

Runs fine. Only time I tried the multiplier mod was when I was on Windows, but using r2modmanPlus, it should have a similar setup with BONELAB.

Configs:

  1. (Proton9.0-4) LD_PRELOAD="" PRESSURE_VESSEL_FILESYSTEMS_RW=$XDG_RUNTIME_DIR/wivrn/comp_ipc:/var/lib/flatpak/app/io.github.wivrn.wivrn %command%
  2. LD_PRELOAD="" DXVK_ASYNC=1 PRESSURE_VESSEL_IMPORT_OPENXR_1_RUNTIMES=1 PRESSURE_VESSEL_FILESYSTEMS_RW=/var/lib/flatpak/app/io.github.wivrn.wivrn/x86_64/stable/464558138d49764021fdb6fce9a21d2853c9ab4af01baa4f718edf1b617396de/files/xrizer %command% %command%
  3. (Proton10.0-4) LD_PRELOAD="" DXVK_ASYNC=1 PRESSURE_VESSEL_IMPORT_OPENXR_1_RUNTIMES=1 PRESSURE_VESSEL_FILESYSTEMS_RW=/var/lib/flatpak/app/io.github.wivrn.wivrn %command%

Terraria

While the native version runs fine, there is an issue where you might randomly lose sound. The quick fix so far, while annoying, is to change the default playback device back and forth. However, that might bring confusion to Discord while in a call, since you are removing the current device just for a second, and will switch to something else.

I’ve switched to the Windows version of the game to help with the sound issue. Frame Skip to On should help to help battle the cursor latency too (cursor is all software).

Also, Vsync is terrible, force it off.

Configs:

  • (Native) LD_PREFIX="" mesa_glthread=true vblank_mode=0 %command%
  • (Proton10.0-4) LD_PREFIX="" mesa_glthread=true vblank_mode=0 %command%

Lethal Company

Launches fine with mods with r2modmanPlus.

Configs:

  1. LD_PRELOAD="" %command%

PEAK

You might want to stick to launch with Vulkan.

Configs:

  1. (GE-Proton10-21) LD_PRELOAD="" %command%
  2. (Proton10.0-4) LD_PRELOAD="" %command%

R.E.P.O.

Needs WINEDLLOVERRIDES for mods.

Configs:

  1. LD_PRELOAD="" DXVK_ASYNC=1 WINEDLLOVERRIDES="winhttp=n,b" %command%

Resonite

Preventive configuration, knowing how VRChat runs.

Configs:

  1. (GE-Proton10-31) LD_PRELOAD="" WINE_CPU_TOPOLOGY=8 PRESSURE_VESSEL_IMPORT_OPENXR_1_RUNTIMES=1 PRESSURE_VESSEL_FILESYSTEMS_PRESSURE_VESSEL_FILESYSTEMS_RW=/var/lib/flatpak/app/io.github.wivrn.wivrn %command%

Risk of Rain 2

Runs fine without issue.

Configs:

  1. (Proton9.0-4) LD_PRELOAD="" %command% -nolog -high

The Elder Scrolls IV: Oblivion Remastered

Scales horribly on many cores. Could make good use of ntsync, but I already completed the game, so I can’t say if it had benefited from it.

Configs:

  1. (Proton9.0-4) LD_PRELOAD="" WINE_CPU_TOPOLOGY=8 VKD3D_FEATURE_LEVEL=12_0 gamemoderun %command%

VRChat

Okay, this one is a bit of a tough one.

The older Unity engine doesn’t tend to help:

  • Scales horribly on many cores
  • dxvk_async helps a lot when compiling shaders
  • ntsync might help with some of the thread synchronization

The use of libmimalloc is optional, but I have been told it helps with performance. Results have been a little mixed, so I’m unsure recommending it.

Using GE-Proton10-26-rtsp20 due to a high mp4 profile when playing videos.

Configs:

  1. (GE-Proton9-22-rtsp17-1) LD_PRELOAD="" WINE_CPU_TOPOLOGY=8 PRESSURE_VESSEL_FILESYSTEMS_RW=$XDG_RUNTIME_DIR/wivrn/comp_ipc:/var/lib/flatpak/app/io.github.wivrn.wivrn %command%
  2. LD_PRELOAD="" WINE_CPU_TOPOLOGY=8 GL_SHADER_DISK_CACHE=1 GL_SHADER_DISK_CACHE_SKIP_CLEANUP=1 GL_SHADER_DISK_CACHE_SIZE=2147483648 DXVK_ASYNC=1 __GL_THREADED_OPTIMIZATIONS=1 DXVK_ENABLE_PIPECOMPILER=1 DXVK_STATE_CACHE=1 PROTON_HEAP_DELAY_FREE=1 PRESSURE_VESSEL_FILESYSTEMS_RW=$XDG_RUNTIME_DIR/wivrn/comp_ipc:/var/lib/flatpak/app/io.github.wivrn.wivrn %command%
  3. LD_PRELOAD="" WINE_CPU_TOPOLOGY=8 GL_SHADER_DISK_CACHE=1 GL_SHADER_DISK_CACHE_SKIP_CLEANUP=1 GL_SHADER_DISK_CACHE_SIZE=2147483648 DXVK_ASYNC=1 __GL_THREADED_OPTIMIZATIONS=1 DXVK_ENABLE_PIPECOMPILER=1 DXVK_STATE_CACHE=1 PROTON_HEAP_DELAY_FREE=1 PRESSURE_VESSEL_IMPORT_OPENXR_1_RUNTIMES=1 PRESSURE_VESSEL_FILESYSTEMS_RW=/var/lib/flatpak/app/io.github.wivrn.wivrn/x86_64/stable/68d7958a1999e2762b7d8d36140035b8d7286580b8f0f0c2db4ac0596891f213/files/xrizer %command%
  4. LD_PRELOAD="" WINE_CPU_TOPOLOGY=8 PROTON_USE_NTSYNC=1 GL_SHADER_DISK_CACHE=1 GL_SHADER_DISK_CACHE_SKIP_CLEANUP=1 GL_SHADER_DISK_CACHE_SIZE=2147483648 DXVK_ASYNC=1 __GL_THREADED_OPTIMIZATIONS=1 DXVK_ENABLE_PIPECOMPILER=1 DXVK_STATE_CACHE=1 PROTON_HEAP_DELAY_FREE=1 PRESSURE_VESSEL_IMPORT_OPENXR_1_RUNTIMES=1 PRESSURE_VESSEL_FILESYSTEMS_RW=/var/lib/flatpak/app/io.github.wivrn.wivrn/x86_64/stable/f7a6f3fc7f73554acc50c1a51fa96f5fb18232dd9e7eb020c40e80b33e77d2f6/files/xrizer %command%
  5. LD_PRELOAD="" WINE_CPU_TOPOLOGY=8 GL_SHADER_DISK_CACHE=1 GL_SHADER_DISK_CACHE_SKIP_CLEANUP=1 GL_SHADER_DISK_CACHE_SIZE=2147483648 DXVK_ASYNC=1 __GL_THREADED_OPTIMIZATIONS=1 DXVK_ENABLE_PIPECOMPILER=1 DXVK_STATE_CACHE=1 PROTON_HEAP_DELAY_FREE=1 PRESSURE_VESSEL_IMPORT_OPENXR_1_RUNTIMES=1 PRESSURE_VESSEL_FILESYSTEMS_RW=/var/lib/flatpak/app/io.github.wivrn.wivrn/x86_64/stable/464558138d49764021fdb6fce9a21d2853c9ab4af01baa4f718edf1b617396de/files/xrizer %command%
  6. LD_PRELOAD="" WINE_CPU_TOPOLOGY=8 PRESSURE_VESSEL_IMPORT_OPENXR_1_RUNTIMES=1 PRESSURE_VESSEL_FILESYSTEMS_RW=/var/lib/flatpak/app/io.github.wivrn.wivrn %command%
  7. (GE-Proton10-15-rtsp18-1) LD_PRELOAD="" WINE_CPU_TOPOLOGY=8 DXVK_STATE_CACHE=1 DXVK_ASYNC=1 PRESSURE_VESSEL_IMPORT_OPENXR_1_RUNTIMES=1 PRESSURE_VESSEL_FILESYSTEMS_RW=/var/lib/flatpak/app/io.github.wivrn.wivrn %command%
  8. LD_PRELOAD="" WINE_CPU_TOPOLOGY=8 WINESYNC=1 PROTON_USE_NTSYNC=1 DXVK_STATE_CACHE=1 DXVK_ASYNC=1 DXVK_ENABLE_PIPECOMPILER=1 PRESSURE_VESSEL_IMPORT_OPENXR_1_RUNTIMES=1 PRESSURE_VESSEL_FILESYSTEMS_RW=/var/lib/flatpak/app/io.github.wivrn.wivrn %command%
  9. LD_PRELOAD="/usr/lib/x86_64-linux-gnu/libmimalloc.so.2" WINE_CPU_TOPOLOGY=8 WINESYNC=1 PROTON_USE_NTSYNC=1 DXVK_STATE_CACHE=1 DXVK_ASYNC=1 DXVK_ENABLE_PIPECOMPILER=1 PRESSURE_VESSEL_IMPORT_OPENXR_1_RUNTIMES=1 PRESSURE_VESSEL_FILESYSTEMS_RW=/var/lib/flatpak/app/io.github.wivrn.wivrn %command%
  10. (GE-Proton10-26-rtsp20) LD_PRELOAD="/usr/lib/x86_64-linux-gnu/libmimalloc.so.2" WINE_CPU_TOPOLOGY=8 WINESYNC=1 PROTON_USE_NTSYNC=1 DXVK_STATE_CACHE=1 DXVK_ASYNC=1 DXVK_ENABLE_PIPECOMPILER=1 PRESSURE_VESSEL_IMPORT_OPENXR_1_RUNTIMES=1 PRESSURE_VESSEL_FILESYSTEMS_RW=/var/lib/flatpak/app/io.github.wivrn.wivrn %command%
  11. LD_PRELOAD="/usr/lib/x86_64-linux-gnu/libmimalloc.so.2" WINE_CPU_TOPOLOGY=6 WINESYNC=1 PROTON_USE_NTSYNC=1 DXVK_STATE_CACHE=1 DXVK_ASYNC=1 PRESSURE_VESSEL_IMPORT_OPENXR_1_RUNTIMES=1 PRESSURE_VESSEL_FILESYSTEMS_RW=/var/lib/flatpak/app/io.github.wivrn.wivrn %command%

Zachtronics Solitaire Collection

Force vsync for OpenGL game.

Configs:

  1. LD_PRELOAD="" vblank_mode=3 %command%

Tools

Miscellaneous section with tools to figure out what graphics API games use, and how well they run.

Rather incomplete, and frankly, should be its own page.

MangoHud

  • MANGOHUD_CONFIG=arch,core_type,ram,vram,exec,exec_name,version,wine,winesync,fps_metrics,gpu_name,histogram,frame_timing_detailed,present_mode,engine_version,gamemode

Engine version (DXVK) example: 2.7.0 (2.7.1 on GH atm) + Vulkan version

DXVK

  • DXVK_HUD=devinfo,fps,frametimes,drawcalls,pipelines,memory,version,api,cs,compiler
  • DXVK_CONFIG_FILE=/home/xxx/dxvk.conf
  • https://github.com/doitsujin/dxvk/wiki/Configuration
  • https://github.com/doitsujin/dxvk/blob/master/dxvk.conf
  • dxvk.numCompilerThreads = 0?
  • d3d11.relaxedBarriers = True?
  • d3d11.relaxedGraphicsBarriers = True?
  • d3d11.disableMsaa = True?