Skip to content

Graphics options

Artur Paiva edited this page Oct 8, 2022 · 3 revisions

The options discussed below are generic for Proton. You can use them independent of protonlaunch.

Frame capping

Some game, specially older ones dont work correctly with high framerates and with modern display reaching multiple hundreds of refresh cycles per second, much more than the default 30 or 60 enabling something like vsync sometimes just dont get the desired result.

For that reason Proton does support frame capping, which basically adds a delay for rendering every frame allowing the framerate to be limited at any arbitrary speed.

I had some issues with Fallout 3 where the lipsync is tied to the framerate and far worst with Grand Theft Auto IV where the physics is tied to the framerate. Those games aren't designed to ran above 60 FPS so that option came handy.

You can set this framecap using the variable DXVK_FRAME_RATE=60 where 60 is your desired frame limit.

This option is only available for DXVK. I couldn't find an alternative for WineD3D or OpenGL, if you know please feel free to fix this part. Vulkan and DirectX 12 shouldn't have this issues since most modern games are designed with high refresh rates in mind.

AMD FSR

AMD FSR (FidelityFX Super Resolution) is a technology that allows better quality upscale of your game similar to NVIDIA's DLSS. FSR is a game specific technology, not all games are supported but it should work on any modern graphics card, even non-AMD ones.

The deal is that due to the fact that most games are being translated on the fly we can hack FSR in our games, and thats what being done. If you want to upscale your game with FSR you can use WINE_FULLSCREEN_FSR=1 to enable it and WINE_FULLSCREEN_FSR_STRENGTH with a value from 1 to 5 to setup the sharpness.

The correct list of graphics cards that support it, even if nvidia is supported on the proton version of FSR is more or less blur. For that reason I wont include a list of supported cards here. I encourage you to try if youre interested on FSR.

DLSS

NVIDIA's DLSS or Deep Learning Super Sample is a technology from NVIDIA that allows better quality upscale using NVIDIA tensor cores built into their RTX series GPUs. Unlike FSR DLSS only works on RTX graphics cards, so RTX 20XX series and upwards.

Also we where unable to hack DLSS on every game, it only works with DLSS supported games. So if you have a NVIDIA card and want to play a DLSS supported title you can enable it using PROTON_ENABLE_NVAPI=1 which will enable NVIDIA specific calls to the proton / wine API.

Since the support is in a experimental stage some games wont work with DLSS even if you have support and others may even crash if you try to enable it.

Ray Tracing

RayTracing is available for DirectX 12 titles under the DXR (DirectX RayTracing). DXR is whats power all RayTracing capabilities on DirectX titles. You can enable DXR for vkd3d using VKD3D_CONFIG=dxr and if you're on a AMD powered GPU thats all you need.

For NVIDIA folks you also need to expose NVIDIA calls using PROTON_ENABLE_NVAPI=1.

Similar to DLSS, DXR is experimental and may not work or break your game.

Multiple GPUs

If you're running a laptop with multiple GPUs you'll see that proton most of the time wont run with the correct driver. Thats independent of you using a Mux Switch or something like Optimus / Bumblebee.

Thats because you have more than one driver installed and the optirun / primusrun commands are designed with OpenGL in mind. Since 90% of what you'll run on Proton rely on Vulkan you may start to run your applications with the wrong driver and in turn the wrong graphics card.

Vulkan uses something called an ICD file to determine which libraries should be loaded. And what driver should be loaded from that. That gives you some powers and also some issues.

One huge advantage is that Bumblebee / Primus is not needed for Vulkan applications, if you point your application to the correct driver with the correct ICD file it should just run with that specific GPU.

The disavantage is that normally vulkan doesn't know which driver to use, specially if multiple GPUs are available. Running with the wrong card or not running at all are possibilities.

You can checkout what graphics card is currently running using your operating system vulkaninfo command (you may need to install it).

To setup which card you're running first i recommend to setup DISABLE_LAYER_AMD_SWITCHABLE_GRAPHICS_1=1 if one of your cards is a AMD one. Because the AMD driver will try to autoload the "correct" driver, that in most cases isn't the one that you want to use.

Then you can specify the path of the ICD files that you want to load using the VK_ICD_FILENAMES variable. Normally those ICD files are located at /usr/share/vulkan/icd.d/ and you can browse too see what drivers are available.

The team at the Arch Linux Wiki did a great job explaining how the ICD loader works and what all options do. Check out.

I'm currently working on a (independent of protonlaunch) script to fix that issue since I have a laptop with a switchable graphics (AMD / NVIDIA). Stay tune for news soon.

Other options

You can check out most options on the Proton official repository, vkd3d repository, dxvk repository and the Wine environment variable documentation.

Clone this wiki locally