-
Notifications
You must be signed in to change notification settings - Fork 72
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Special K: Experimentally re-enable support for ReShade and Special K #897
Conversation
See discussion in #894, but essentially the following is needed:
We don't need to put the DLLs into the game prefix in a PlugIns folder, or modify any INI files. Everything should go into the game folder. We need to know how to handle various ReShade options when using SpecialK as well, namely:
|
In the case of NieR:Automata (a 64bit D3D11 game), renaming the SpecialK DLL from The DLL name used by SpecialK appears to be important here. And also, all of this is manual for now (except for the SpecialK installation). We need to know the behaviour and parameters first before we attempt an implementation. What is clear, though, is that this PR needs more work to accommodate this. |
Pushed a hefty commit that does a few things:
There is still some work left to do:
With this PR in its current state, testing with NieR:Automata with GE-Proton8-14 using SteamTinkerLaunch with SpecialK and ReShade enabled, and then renaming |
Tested NieR:Replicant, it needed the DLL rename from Interestingly, it seems now neither game needs d3dcompiler_47? Very strange indeed. |
Appears to be more compatible
As of right now, for NieR:Automata, SteamTinkerLaunch, SpecialK and ReShade can be used together with no manual intervention required! The DLLs will be copied over and SpecialK will load ReShade as normal. NieR:Replicant still fails because it fails to find the rendering API, and falls back to Intended behaviour is currently to use I also noticed that we don't check for d3d12 at all, I wonder if it can use Once the check here is improved so that Direct3D 11 titles can be found, NieR:Replicant should work. Missing features:
|
acd0631
to
710c8c4
Compare
I changed the logic for finding the SpecialK rendering API to be the following:
In testing with NieR:Automata and NieR:Replicant, |
ReShade Override and ReShade Update work flawlessly. Sadly it was discovered that for NieR:Automata and NieR:Replicant, only ReShade 5.4.2 and below(?) appear to work. Newer versions introduce a conflict with ReShade seems to want to load over SpecialK, causing SpecialK's OSD not to appear, and its menu to be invisible. One solution to this is the following:
This way, if a game does support a newer ReShade version in combination with SpecialK, they can override the version for that game. Similarly, if support does improve across the board for the ReShade version which can be used with SpecialK, then a user can bump this. We can also bump this too in updates, so we control which version of ReShade is used with SpecialK. We would also, of course, have to document this on the wiki. |
With the PR in its current state, NieR:Automata and NieR:Replicant both work with ReShade and SpecialK provided the ReShade version used is Version is bumped, langfiles are unchanged, shellcheck is green, so this PR is ready to merge! One step closer towards ReShade and SpecialK playing nice together. |
If this works, it will resolve #894.
Previously ReShade and SpecialK had a crash conflict. This may no longer be the case. Special K has what appears to be a different way of handling ReShade DLLs now which may be more compatible under Wine.
The code in STL copies the ReShade DLLs over into the game exe folder without renaming them, as SpecialK is injected into the game with
dxgi.dll
(or another architecture, possibly auto-detected based on game API in the game list HTML file?) so it is responsible for picking up theReShade32.dll
/ReShade64.dll
files and injecting them.The settings for the game exe folder is taken from the same one as the ReShade setting, and as well the logic for this expects ReShade and SpecialK to be both enabled. However, because the code for this ReShade+Special K integration was written long ago, it doesn't include the ReShade Version Override changes from #649, and also probably does not include the ReShade automatic update. Both of these are potential future improvements to the integration.
We should also make sure the ReShade DLL naming from #881 does not apply when working with Special K (ex: if USESPECIALK, don't use the ReShade DLL name code). From glancing at the code this should be the case, but I have not tested.
The code for 99% of this was written by Frostworx long ago and commented out, when it was found that ReShade and SpecialK caused games to crash if used together. Only minor refactoring has been done to account for some changes since this code was commented out (such as #696 impacting a couple of lines).
This code is untested by me for now. Another user has volunteered to test and see what cosmic horrors await by re-enabling this. Let us hope for success 🫡