PSA: Lutris' worst RTFM ever for Proton users (and how to fix it)

UPDATE: Thank you to @mihawk90 for the solution since I’m not used to using Lutris vs Proton. Changing the default in your runner config is all you need to do.

So, if you’re coming from Proton to Lutris because you bought some GoG games, you might expect using Proton in Lutris to configure Esync for you as it’s by default on when Steam launches Proton, right?


Lutris uses a completely different logic regarding Esync. It’s a manual setting and always will be a manual setting, so even if you ran Proton as your Wine version, the defaults exist in STEAM, not Lutris. This is also dependent on your installer, and unfortunately most GoG installer scripts from the Lutris site are broken as they don’t complete the installation due to improper filepath sanitation.

So if you’re installing a Wine game manually using Lutris, and then plan to use Proton as your Wine version. Esync is still a MANUAL TOGGLE. If you leave it as is, Esync is not engaged.

The problem is made worse when Lutris itself cannot detect Proton versions as supporting Esync, so if you turn it on, it will warn it doesn’t support it and if you didn’t know better, you’d think it’s impossible. NO, it’s possible, you just have to hide the warning.

This is what was the cause of really bad performance issues on Unreal Engine 3 titles using Lutris and their Windows GoG DRM-free installers.

Also, because Steam cleans the prefix between unofficial and official Proton versions, you don’t have to worry about dirty prefixes, whereas with Lutris, going from official Proton to Proton-GE will crash your Vulkan driver HARD due to winevulkan differences. (Though I have just been informed VERY CLEARLY this might not be Wine nor the prefix’s fault.)

TL;DR: Enable Esync in Lutris MANUALLY for Proton. It’s not enabled by default. Hide the error message when it says Proton doesn’t support Esync.

Large Address Aware for 32bit games can also be manually enabled with the Environment Variable WINE_LARGE_ADDRESS_AWARE=1. This also doesn’t work with the Proton environment variable because you’re not executing the proton file.


Does steam store it’s own config file per game, under compatdata/gameid/pfx location?

This is Lutris. Lutris creates it’s own prefix with it’s own config files.

Steam config is mostly advanced launch options, not actual files. The Proton version used and launch arguments is stored with game configuration files that aren’t in the /steamapps folder.

Defaults are defined by the proton file which Lutris doesn’t use. It assumes Proton is just Wine and tries to run it like Wine, not through the proton file.

Not many people use the user config python file because Environment Variables help most of the way. That also won’t help Lutris one bit if it was present. Large Address Aware also won’t apply because it’s a Proton environment variable that Lutris has (I believe) no equivalent option for. (you’d have to use the Wine environment variable)

What is esync and why should I/we care? (serious)

Esync speeds up I/O for memory intensive or disk intensive operations. Unreal Engine 3 is memory intensive, so it needs as much performance there as possible.

Proton has it on by default, but some single core only games stutter because of this and need it turned off. The default is different on Lutris because it treats it like just another Wine version.

What sort of performance impact can one expect with esync disabled? Are there benchmarks?

I got as low as 45fps on a 3600X with Bioshock Infinite with Esync off.

45 FPS vs what is it when enabled?

I can only give a relative performance that the DXVK HUD GPU usage didn’t drop to 50% like it did before. Now it remained at 100%.

I’m only inquiring because 45 FPS if consistent frame-times is still very playable to most people so they might not even notice a difference.

That was a 0.1% low with heavy cloud effects. Esync helped 1% lows by a ton on fast processors and especially with Unreal Engine.

Alright, that’s where the real meat is.

1 Like

maybe enable MangoHud as an environment variable instead? useful for benchmarking



1 Like

i LOVE mangohud.

I use it on and off sometimes, but the DXVK usage is what dictates how efficient DirectX is being translated to Vulkan. If it’s below 100% without Vsync, you could potentially have a bottleneck in your memory subsystem or there’s not enough CPU compute power for the overhead.

Pro-Tip: If you find an installer that has it wrong, just correct it. It’s a community effort and ranting on a random forum won’t fix the issue.

@Dynamic_Gravity For a more detailed explanation what esync is and how it works:


Seems to be a common theme.


The first three chapters are really all you need.

Good luck.

1 Like

Oh also one thing I forgot, if you want to make sure that WINE uses ESYNC by default you can just set it in the runner configuration:

TL;DR pls :stuck_out_tongue:

git clone
git checkout -b doc-error

# edit error

git config --global root
git config --global root@localhost

git commit -am "changed the thing"

git push origin doc-error

Log in to GitHub, go to repository, create a pull request. Devs will review and merge.