dd86k's blog

Machine code enthusiast

Proton

This is a living document of my Proton configuration 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 fixes that, so it’s become a habit to put it everywhere.

My current setup is an Ubuntu 24.04 LTS based distribution using Linux 6.14 with the ntsync module loaded and Steam installed natively.

Last updated: 2026-01-14

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%

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

Somehow tends to prefer software rendering, force it off. And this is one of those entries that the Windows version run worse than the native build.

Configs:

  1. LD_PRELOAD="" LIBGL_ALWAYS_SOFTWARE=0 ./Cities.x64 %command%
  2. 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%

Half-Life 2

Configs:

  1. gamemoderun %command% -novid -vulkan

Helldivers 2

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

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 r2modman, 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. (GE-Proton10-21) 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%

Lethal Company

Launches fine with mods via r2modman.

Configs:

  1. LD_PRELOAD="" %command%

PEAK

You might want to stick to launch with Vulkan.

Configs:

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

R.E.P.O.

Needs WINEDLLOVERRIDES for mods.

Configs:

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

Risk of Rain 2

Configs:

  1. 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.

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 doozy.

The older Unity engine doesn’t tend to help:

  • Scales horribly on many cores
  • ntsync and dxvk_async is mostly to help video loading suttering

The use of libmimalloc is optional, but I have been told it helps with performance.

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%

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.

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?