Skip to content

ReShade

Andres edited this page Oct 1, 2024 · 30 revisions

(Project Page: ReShade)

(See also Depth3D, Shader-Repositories, and Shader-Management.)

NOTE: Vulkan games are NOT supported with ReShade on Linux. If a solution is known please open an issue describing the implementation, or open a PR to implement this. ReShade is also not supported by native Linux games, even those using OpenGL/DXVK Native/Zink. The current solution is to use vkBasalt for Vulkan games, both running through Wine/Proton and running natively on Linux.

You can find more information on the paths where SteamTinkerLaunch downloads and extracts ReShade versions to on the Paths wiki page.

Usage

(in Game Menu or Game Config)

Enabling ReShade

SteamTinkerLaunch v14.0 and above now have only one option to enable and install ReShade into the game files. This is the Enable ReShade checkbox (or set USERESHADE=1 in the game config file). This will download the global ReShade version (set in the global menu), or optionally the ReShade Override version if you have enabled a specific ReShade version for the game.

When this option is disabled, all tracked ReShade files will be renamed so that they are not loaded by the game (ex: DLL files will be renamed to have .dll_off).

All required ReShade files are downloaded into RESHADESRCDIR, each in a subfolder matching the ReShade version (such as 5.9.1).

A good way to know if ReShade is working is to load up your game and see if it shows the ReShade menu. This is a small menu that typically appears on the top, left, or right side of the screen, displaying the ReShade version and offering some general first-start advice.

NOTE: On top of enabling reshade YOU MUST ALSO specify what shader repos you want to use, AND what shaders you want to install into your game (just like in the official reshade installer on Windows) Otherwise reshade WILL NOT find any shaders

Game Architecture

The required architecture is auto-detected from the game executable (or an alternative selected executable), and the matching files are copied from the internal SteamTinkerLaunch ReShade downloads directory (RESHADESRCDIR) into the selected game directory.

DLL Names and Graphics APIs

ReShade works by way of DLL injection. Using either a 32bit of a 64bit DLL, ReShade will inject itself into a game by naming itself after the graphics API that a game uses, such as d3d9.dll for Direct3D 9 games. This means a Direct3D 9 game will load the ReShade DLL and the ReShade code will be injected into the game, allowing it to run. In the case of Wine, this requires a DLL override which SteamTinkerLaunch sets out-of-the-box.

SteamTinkerLaunch will also download and install d3dcompiler_47.dll into the game folder to ensure maximum compatibility with ReShade.

The name of the ReShade DLL in the game files must match thee graphics API that a game is using. Below is a list of Graphics API names and the DLL name which should be used for it:

Graphics API DLL name
Direct3D 9 d3d9.dll
Direct3D 10/11/12 dxgi.dll
Direct3D 11 d3d11.dll
OpenGL opengl32.dll

Despite the DLL name, opengl32.dll should work for both 32bit and 64bit games. It will always be named opengl32.dll though, as that is the name of the 32bit and 64bit OpenGL DLLs on Windows and in the Wine prefix.

SteamTinkerLaunch v14.0 and above give users the option to enter the name of the DLL themselves, in the "ReShade DLL Name" textbox. This has a pre-populated list of DLL names which you can use. The default name is dxgi.dll to maximise compatibility, if the textbox is left blank then dxgi.dll will also be used. However if you are using a Direct3D 9 game, make sure you select d3d9.dll.

This textbox can also accept multiple values, such as d3d9.dll,dxgi.dll. If you do not provide a file extension, SteamTinkerLaunch will append the .dll extension for you.

SteamTinkerLaunch tracks the currently installed DLLs in the game folder with the file ReShade.txt.

Determining the Graphics API.

Refer to the PCGamingWiki ReShade Compatibility List to find out about which Graphics API your game is using, or to the Steam Store Page to find out the minimum graphics API version.

Please keep in mind that some games may have the option to use multiple graphics APIs. Below is a list of some games with multiple rendering APIs to illustrate how care must be taken to properly investigate which graphics APIs a game offers and how care must be taken to choose the correct ReShade DLL name:

  • DOOM 2016 offers an OpenGL and Vulkan API.
  • Hades offers Direct3D 9 (32bit), Direct3D 11, and Vulkan API.
  • Baldur's Gate 3 offers a Direct3D 11 and Vulkan API.

Naming DLLs

You can also enter custom DLL names if you have a need to set a custom one, but please note that you may have to manually set a Wine DLL override to ensure the DLL is picked up by the game.

It may be useful to set a custom DLL name if the default DLL name is already in use by the game, or by a modloader. In other words, it is useful to avoid DLL naming conflicts.

DLL Naming Conflicts

In the event of a DLL naming conflict, SteamTinkerLaunch will back up the offending DLL with the existing name to dll_name.dll.bak. If this causes issues, such as a game DLL being overwritten inadvertently, you should remove the ReShade DLL with the chosen name, and then rename the previous DLL to remove the .bak suffix. This should restore the DLL.

If this DLL somehow got overwritten again, you should be able to restore the original DLL by right clicking your game within Steam -> Properties... -> Installed Files -> Verify Integrity of game files.

Renaming DLLs

When you change the name of the ReShade DLL, the original DLL name will not be removed. So if you choose the name d3d11.dll and it causes your game to crash, it won't be removed when you change the name. This is because it's impossible for SteamTinkerLaunch to know which DLLs were placed by itself, the user, the game, mods, and so on. It is up to the user to remove any DLLs which are causing issues, and to select the ReShade DLL name with care.

However, when DLLs are renamed, the tracked DLLs list in ReShade.txt is updated. So if you originally had d3d11.dll, then removed it from the game files and then also chose a different ReShade DLL name, SteamTinkerLaunch will stop tracking it. This means when disabling ReShade, these previously-selected DLLs which are no longer the selected names will NOT be turned off, so if d3d11.dll was later in use by a mod, there would be no risk of a conflict.

Legacy Behaviour

SteamTinkerLaunch v12.12 and below will copy the ReShade DLL that corresponds with the game architecture (ReShade32.dll or ReShade64.dll) into the same folder as the game executable, and it will always name them dxgi.dll and d3d9.dll in an attempt to cover Direct 3D 9/10/11 games without any intervention from the user. This has been known to cause problems, however, if a game tries to load both of these DLLs and likely due to a game bug will load the incorrect DLL (noted to happen with Tales of Arise in #873 when it tries to load d3d9.dll).

It should be noted that by default, OpenGL games do not work with ReShade in SteamTinkerLaunch v12.12.

ReShade Auto Update

With RESHADEUPDATE being enabled (per game) in the Main Menu, new ReShade Setups are downloaded/extracted automatically. Every ReShade version is also stored in a versioned folder from now on in the local SteamTinkerLaunch downloads directory.

ReShade is updated based on the global ReShade version in the Global Menu, which can also be auto-updated to the latest release version with the Auto-update ReShade checkbox in Global Menu). On each boot of a game using ReShade, the ReShade DLLs with their respective selected names are automatically updated in every game directory.

ReShade-Version-Override

By default, SteamTinkerLaunch has an internal, hardcoded ReShade version. This can be adjusted in the Global Menu, but it may be useful to set a custom ReShade version per-game as well. For example this could work around game conflicts or temporary issues with shaders.

With the ReShade Override checkbox (or RSOVRD=1 in the Game Menu) the ReShade version can be overwritten per game from the Game Menu.

When the ReShade Override checkbox is enabled, it is possible to enter a specific ReShade version, or select it from the dropdown. If an invalid ReShade version is entered, SteamTinkerLaunch will fall back to the latest version it can find.

ReShade_Addon

From ReShade 5.0 and onward, there is an optional "Addon" variation. By default this is not used by SteamTinkerLaunch in any case, but by setting the ReShade override version, it is possible to select this version by appending _Addon to youur entered ReShade version, for example 5.4.2_Addon.

NOTE: Using ReShade Addon WILL trigger a game's Anti-Cheat and should NOT be used for online multiplayer games featuring invasive Anti-Cheat systems.

Advanced Usage

Manual Installation

You can install all ReShade files manually as well. Make sure to rename all files correctly.

You can manually create a ReShade version in the SteamTinkerLaunch ReShade downloads directory. Create a subfolder to contain the ReShade32.dll and ReShade64.dll files, naming this subfolder after a version for the ReShade Version/ReShade Override version textboxes to pick up.

To manually install the ReShade DLLs into a game folder yourself, such as without SteamTinkerLaunch, simply copy either a 32bit or 64bit ReShade DLL (depending on the architecture of your game) and then give it a name corresponding to the graphics API that your game is using (such as d3d9.dll for Direct3D 9 games). To find out the architecture of your game, you can run file /path/to/game.exe and take note of whether it is a PE32 executable (32bit) or a different format (almost always 64bit, unless you have a very odd executable).

When manually installing ReShade, take care to ensure the ReShade.ini file uses the correct line endings. If you experience crashes with your ReShade.ini, try converting the file to use Unix line endings with a command line dos2unix /path/to/ReShade.ini.

Using ReShade and SpecialK together

(See also #894 and #897)

With SteamTinkerLaunch v14.0.20230909-1 and newer, it is possible to enable ReShade and SpecialK together. However, in many cases, they will not play nicely together. This even appears to be the case on Windows with some games. The version of ReShade used and even the ReShade DLL name chosen can play a role.

In testing, the most compatible ReShade version was found to be v5.4.2. This was tested against NieR:Automata and NieR:Replicant. As a result of this requirement, the default global ReShade version of SteamTinkerLaunch may not be compatible with SpecialK.

There is an option on the Global Menu to set a SpecialK ReShade Override version, this is enabled by default and set to 5.4.2, but this can be adjusted or disabled entirely. If you know a certain game does work with a newer ReShade version when using SpecialK, the ReShade Override version can be applied. This still works when using ReShade+SpecialK together, though if you have already installed ReShade you'll need to use "ReShade Update" to ensure the old version gets overwritten.

The ReShade version order of precedence is as follows:

  1. ReShade Override Version, this takes the highest priority -- needs ReShade Update if ReShade is already installed, as any existing ReShade install will not have its version changed unless this option is on.
  2. SpecialK ReShade Version, this will take priority over the default Global ReShade version, but NOT over the ReShade Override version -- Does not apply if SpecialK is not enabled.
  3. ReShade Global Version, this is the default, "fallback" value if there is no other specified version.

SteamTinkerLaunch copies the ReShade DLL matching the game's architecture to the same folder as the game executable. You can also use the ReShade option to choose a different executable to fetch the architecture from, as well as choosing a different game executable folder. Both of these settings will apply to SpecialK and ReShade together.

When ReShade is used with SpecialK, if SpecialK is disabled or if the option to load ReShade as a SpecialK plugin is disabled, ReShade will use the either the override version or the default global version. In other words, if ReShade is NOT used as a SpecialK plugin, the ReShade+SpecialK version on the global menu will NOT be used.

When SpecialK is disabled, or when the SpecialK ReShade Plugin option is disabled, ReShade will be installed as normal and the existing SpecialK ReShade Plugin files (where the DLLs are named ReShade32.dll/ReShade64.dll) are removed. The INI files are preserved always however, so feel free to go into the game files and copy, back up, or rename these as you need to.

Compatibility issues that you may encounter with ReShade and SpecialK include:

  • ReShade will just not load at all
  • Immediate game crashes
  • ReShade bubble showing on game boot instead of SpecialK bubble showing, resulting in the SpecialK menu being activated but being invisible
  • Games launching once but crashing on subsequent executions (sometimes caused by ReShade.ini needing to have Unix line endings with dos2unix /path/to/ReShade.ini, or a Proton version being unable to play the WAV files in /path/to/steamapps/compatdata/<appid>/pfx/drive_c/users/steamuser/Documents/My Mods/SpecialK/Assets/Shared/Sound)
  • Some Proton versions requiring d3dcompiler_47.dll to be set as an override (WINEDLLOVERRIDES="d3dcompiler_47=n,b" as a launch option, or selected from the Wine DLL Overrides dropdown with SteamTinkerLaunch under Wine options)

ReShade SpecialK INI Tweaks

In some games, it is required to manually edit the SpecialK INI file to get ReShade to load. Under the [Import.ReShade64] / [Import.ReShade32] sections (depending on the game architecture), you may need to tweak the When option. These can be Early, PlugIn, or Lazy. As an example, for "Monster Hunter: World", it was reported that When=Early was required for ReShade to load (#894 (comment)).

This is also documented on the upstream SpecialK wiki, see that page for further information as well.

Disabling ReShade INI Creation

By default, SteamTinkerLaunch will create a default ReShade INI when installing ReShade for the first time. However there may be cases where you want to disable this, notably for some SpecialK features which will complain when an existing ReShade INI is present (#894 (comment)). You can disable the "Create ReShade INI" checkbox (CREATERESHINI, enabled by default) to stop SteamTinkerLaunch from creating the INI file. Do note however that some SpecialK versions may create this INI anyway, and also that disabling this option will NOT remove an existing ReShade INI file; if one already exists in your game files, you will have to manually remove it.

Custom Commands

By default, ReShade is not selected to work with custom commands. This can be toggle with the "Use ReShade with Custom Command" checkbox (or set CUSTOMCMDRESHADE=1 in the Game Menu). Then any chosen custom command will have ReShade installed into its game files.

Clone this wiki locally