Skip to content
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

ReShade compatibility with Special K #894

Closed
CartoonFan opened this issue Sep 5, 2023 · 112 comments · Fixed by #897, #912, #917, #919 or #921
Closed

ReShade compatibility with Special K #894

CartoonFan opened this issue Sep 5, 2023 · 112 comments · Fixed by #897, #912, #917, #919 or #921
Labels
enhancement New feature or request Initiative Issues detailing a significant set of features/enhancements ReShade Issues related to using ReShade with SteamTinkerLaunch SpecialK Issues related to using SpecialK with SteamTinkerLaunch

Comments

@CartoonFan
Copy link

CartoonFan commented Sep 5, 2023

System Information

  • SteamTinkerLaunch version: v14.0.20230903-1
  • Distribution: Arch Linux

Feature Description

While working through #893 and #889, I found that Special K currently has a non-deprecated way of loading (and using) the ReShade dll. Does it seem like it's worth putting into STL?

20230905082444_1

It seems like a pretty doable thing to add: just copy the ReShade dll for the correct arch into the game dir--without renaming it--and Special K will create the rest of the files itself. Maybe having a GUI option like "Special K compatibility" or "Special K plugin" or similar might work well? I don't know too much Bash, but I'm open to helping, if it's not too daunting of a task. Thanks!

Details here: https://wiki.special-k.info/en/SpecialK/ReShade#automatic-plugin-system

@CartoonFan CartoonFan added the enhancement New feature or request label Sep 5, 2023
@sonic2kk
Copy link
Owner

sonic2kk commented Sep 5, 2023

Historically Special K and ReShade have not worked on Linux, so it was something I believe the previous maintainer disabled. There is some comments warning about it in the code, too.

I can investigate it though, it's worth revisiting. Do you know if it actually works? Special K is historically always software I have avoided like the plague due to the (previous?) creator's attitudes towards Valve and Linux users, so I have very minimal knowledge of what it offers and compatibility on Linux.

@sonic2kk sonic2kk added the SpecialK Issues related to using SpecialK with SteamTinkerLaunch label Sep 5, 2023
@sonic2kk
Copy link
Owner

sonic2kk commented Sep 5, 2023

I wasn't on my PC when I wrote the above, I am now and did some code and wiki investigation.

The SteamTinkerLaunch SpecialK Wiki Page (which seems fairly outdated?) notes the following:

SpecialK supports loading ReShade as a plugin, but unfortunately this leads to a crash (currently). The functionality is already implemented (apart from auto-adding ReShade to the SpecialK ini if enabled)

This page has not been edited in over a year, and that was for an unrelated edit. In fact, this section was not even touched for the SpecialK rewrite that happened. In fact, it seems like this section of the wiki was added in November 2021, so almost 2 years ago!

The SteamTinkerLaunch ReShade Wiki Page has a similar section warning of the same thing, but recently when I was modifying it to note the recent improvements to ReShade support, I put a note around whether this was still valid. This note was added a long time ago!

It is very possible that things have changed since then, and that SpecialK and ReShade work together. The prepareSpecialKReshade function does have existing code for modifying the SpecialK INI, and checkReshade has code to move the DLL with the "un-renamed" DLLs. Both of these sections note that this causes a crash. The way the logic in the code works right now is that if ReShade and SpecialK are enabled, STL tries to "detect" this and basically instead of installing its own ReShade, it installs the DLLs as-is, essentially providing ReShade for SpecialK and not worrying about any DLL injection.

The code around ReShade has changed significantly in this time, so I would need to investigate to see if it is still valid. The conditional logic doesn't seem like it would work anymore, it seems like it would still run the regular ReShade code, so a small refactor of how and when STL detects that ReShade and SpecialK are enabled together would be needed.

Though I wonder how this works for the exported DLL overrides for ReShade standalone, because we wouldn't want to export that if ReShade was being used with SpecialK, since SpecialK is responsible for injecting it... I'll need to look into that as well.


I have not dug deep into your other issue yet but I appreciate you looking into these issues so much before reporting them, and making sure they're of good quality. SpecialK in STL has been almost entirely untouched in the last 10 months or so, and I'm more than willing to make improvements where possible :-)

Once I dive deep into your other issue and your comments on the earlier issue for how to use SpecialK with NieR:Automata, and understand better the state of SpecialK with STL/Linux in general, I can look into how feasible this is to add.

It may not be very much work to make an experimental branch with this code slightly refactored and re-enabled! I'll check this as well over the next few days hopefully.

@sonic2kk
Copy link
Owner

sonic2kk commented Sep 5, 2023

I did the refactor and pushed the changes to a branch which re-enables the ReShade DLLs: reenable-reshade-specialk (not my most creative branch naming 😅).

All the code currently does is move the ReShade DLLs with their untouched names, ReShade32.dll and ReShade64.dll, and puts them into the directory with the game executable, or the alternative directroy that the user has selected for ReShade. To use this, ReShade and SpecialK must be enabled together, this isn't a separate setting as you proposed in your OP because I feel like that may be overkill, and because the logic to detect when using ReShade and SpecialK together is reasonably reusable.

I should also note that automatic ReShade updating (RESHADEUPDATE) and the ReShade version override (RSOVRVERS) do not work with this setting, as it was written long before #649. It should be possible to implement but one step at a time, I want to see if re-enabling this logic actually works before I end up putting the horse before the cart :-)


If you're willing to test, it should be possible to install this branch of SteamTinkerLaunch in a couple of ways, most involve temporarily uninstalling the AUR package (should preserve ~/.config/steamtinkerlaunch, but feel free to back it up 🙂). Make sure to run steamtinkerlaunch compat add afterwards just to be sure everything updates on Steam's side.

  1. You could modify the AUR PKGBUILD to point to the new branch and re-install it
  2. You could clone the branch and run sudo make uninstall - When you're done, there is a sudo make uninstall option
  3. You could install from ProtonUp-Qt in Advanced Mode, where you can choose SteamTinkerLaunch-git, and from the version dropdown you can choose the branch name you want to install from - This creates a non-root install to ~/stl/prefix which can be uninstalled from ProtonUp-Qt or manually by deleting the folder. It also adds SteamTinkerLaunch to your PATH
    • It should be possible to actually keep your existing STL install from the AUR and install this alongside it, though to run STL commands you will end up with a conflict since STL is on your path both from /usr/bin and from ~/stl/prefix. To avoid this, you could tell ProtonUp-Qt not to add SteamTinkerLaunch to your PATH during installation.
    • You'll have to run the script directly to run STL commands, so you'll have to do something like cd ~/stl/prefix && ./steamtinkerlaunch compat add to overwrite the symlink in Steam's compatibilitytools.d, so that it points to the script at ~/stl/prefix.

You'll be able to tell that you're using the right SteamTinkerLaunch version because the version on the main menu will have the branch name in it, and also the logfile will mention the version with the branch name as well (v14.0.20230906-1 (reenable-reshade-specialk)). The branch is a fresh cut from master, so you aren't losing any features by using it right now.

I will also say that right now this is basically entirely untested. This could be a big mistake with problems ranging from manual intervention being required to remove the relevant ReShade files from the game directory, or something utterly catastrophic like 2B being unable to pet Pod 042. Basically, this is untested, I just did a small refactor to fix the conditional logic, updated some logging, and did a Ctrl+/ to uncomment the ReShade blocks :-)

@CartoonFan
Copy link
Author

I switched to the new branch, and things didn't blow up afterwards, so it's a win for now 😆

Once #896 gets merged, I should be able to do more testing 👍

@sonic2kk
Copy link
Owner

sonic2kk commented Sep 6, 2023

#896 has been merged, a risky, uncaffeinated 2am merge (which seems to be increasingly common these days 🤔) but it should be fine (the diff was only so big because I unindented a bunch).

@sonic2kk
Copy link
Owner

sonic2kk commented Sep 6, 2023

Ah wait I'm dumb, the changes haven't been merged into the ReShade branch yet. I'll do that now, so that the code on the branch includes the fixes from #896 (basically it's still on an older revision of the code).

@CartoonFan
Copy link
Author

Ah wait I'm dumb, the changes haven't been merged into the ReShade branch yet. I'll do that now, so that the code on the branch includes the fixes from #896 (basically it's still on an older revision of the code).

Got it. I'll be here waiting 🙏 💜

#896 has been merged, a risky, uncaffeinated 2am merge (which seems to be increasingly common these days 🤔)

Don't forget to take care of yourself, too 😄

@sonic2kk
Copy link
Owner

sonic2kk commented Sep 6, 2023

There was a conflict with the branches which gave me a slight scare, but it was just the version line which causes conflicts between branches all the time, so it was easy to resolve. When you have time feel free to test and report back with, I hope, some success!

As a small update from my earlier comment, the version is now v14.0.20230907-1 (reenable-reshade-specialk) (bumped the day because usually on branches the version is the current day for me + 1, to even moreso differentiate from the version on master).

@CartoonFan
Copy link
Author

CartoonFan commented Sep 6, 2023

There was a conflict with the branches which gave me a slight scare, but it was just the version line which causes conflicts between branches all the time, so it was easy to resolve. When you have time feel free to test and report back with, I hope, some success!

As a small update from my earlier comment, the version is now v14.0.20230907-1 (reenable-reshade-specialk) (bumped the day because usually on branches the version is the current day for me + 1, to even moreso differentiate from the version on master).

Will do! I'll take note of the version, and do some testing 😄

@CartoonFan
Copy link
Author

CartoonFan commented Sep 6, 2023

I'd say it's a solid step in the right direction! The ms-api check doesn't appear, the Special K setup completes, and its UI is working in-game; all from just selecting vcredist2022 in the first run setup and re-creating the Wineprefix from the GUI.

However...the ReShade dlls don't seem to be copied over to the game folder. Rather, STL appears to be trying to continuously copy the (renamed) dll into one of the steamuser directories instead.

[jeremiah@arcadia ReShade]$ pwd
/home/jeremiah/.config/steamtinkerlaunch/proton/steamuser/global/Documents/My Mods/SpecialK/Plugins/ThirdParty/ReShade
[jeremiah@arcadia ReShade]$ ls -lv
total 7784
-rw-r--r-- 1 jeremiah jeremiah     277 Sep  5 19:29 ReShade.ini
-rw-r--r-- 1 jeremiah jeremiah      34 Sep  5 19:29 ReShade.txt
-rw-r--r-- 1 jeremiah jeremiah 3977952 Sep  5 19:27 d3d1
-rw-r--r-- 1 jeremiah jeremiah 3977952 Sep  5 19:22 d3d11.dll
[jeremiah@arcadia ReShade]$ 
[jeremiah@arcadia NieRAutomata]$ pwd
/home/jeremiah/.local/share/Steam/steamapps/common/NieRAutomata
[jeremiah@arcadia NieRAutomata]$ ls -lv
total 50268
-rw-r--r-- 1 jeremiah jeremiah      522 Sep  5 18:48 FAR.ini
-rw-r--r-- 1 jeremiah jeremiah    18207 Sep 10  2021 LodMod.ini
-rwxr-xr-x 1 jeremiah jeremiah 17837952 Sep  3 02:01 NieRAutomata.exe
-rwxr-xr-x 1 jeremiah jeremiah 17786752 Sep  3 02:01 NieRAutomataCompat.exe
drwxr-xr-x 4 jeremiah jeremiah     4096 Sep  2 11:18 SK_Res
drwxr-xr-x 3 jeremiah jeremiah     4096 Sep  5 08:24 Screenshots
-rw-r--r-- 1 jeremiah jeremiah       73 Sep  5 19:30 SpecialK_enabled.txt
drwxr-xr-x 2 jeremiah jeremiah     4096 Apr 10 04:50 Wallpaper
-rw-r--r-- 1 jeremiah jeremiah       12 Apr 15 20:36 check-steam_appid.txt
-rw-r--r-- 1 jeremiah jeremiah  4173928 Sep  5 18:48 d3dcompiler_47.dll
drwxr-xr-x 6 jeremiah jeremiah     4096 Apr 18 00:38 data
-rw-r--r-- 1 jeremiah jeremiah 11000320 Sep  5 18:48 dxgi.dll
-rw-r--r-- 1 jeremiah jeremiah     7564 Sep  5 19:00 dxgi.ini
-rwxr-xr-x 1 jeremiah jeremiah      858 Sep  3 02:01 installation_os_check.vdf
drwxr-xr-x 3 jeremiah jeremiah     4096 Sep  5 19:00 logs
-rwxr-xr-x 1 jeremiah jeremiah   242976 Sep  5 07:11 steam_api64.dll
-rw-r--r-- 1 jeremiah jeremiah        7 Apr 15 20:36 steam_appid.txt
-rwxr-xr-x 1 jeremiah jeremiah      324 Sep  3 02:01 win8_7_setup.bat
-rwxr-xr-x 1 jeremiah jeremiah      222 Sep  3 02:01 win10setup.bat
-rw-r--r-- 1 jeremiah jeremiah   343040 Sep 10  2021 xinput1_4.dll
[jeremiah@arcadia NieRAutomata]$ 

524220_gamelaunch.log
steam-524220.log
524220_steamtinkerlaunch.log
524220_reshade_branch_V1.conf.zip

@sonic2kk
Copy link
Owner

sonic2kk commented Sep 6, 2023

Thank you for testing! I guess the DESTDIR that STL is using in the code is set to some location I did not expect. I'll take a look into it, however...

I did some manual testing of moving the ReShade DLLs and modifying the dxgi.ini for SpecialK with NieR:Automata, and didn't have promising results. Once I have time to collate my findings of how this works manually I'll try to describe it, and then you can test on a regular STL git install (without any branches) to see how things are working. The tl;dr is that I got SpecialK and ReShade to load, and at game start it showed the UI bubble for both, but when trying to activate the ReShade UI it was totally invisible. I could only tell it was active because the cursor changed.

Once I can figure out more around the parameters on how to use ReShade and SpecialK I'll try to describe it, because a lot of the constellations I tried manually caused a crash.

@CartoonFan
Copy link
Author

CartoonFan commented Sep 6, 2023

I did some manual testing of moving the ReShade DLLs and modifying the dxgi.ini for SpecialK with NieR:Automata, and didn't have promising results. Once I have time to collate my findings of how this works manually I'll try to describe it, and then you can test on a regular STL git install (without any branches) to see how things are working. The tl;dr is that I got SpecialK and ReShade to load, and at game start it showed the UI bubble for both, but when trying to activate the ReShade UI it was totally invisible. I could only tell it was active because the cursor changed.

Once I can figure out more around the parameters on how to use ReShade and SpecialK I'll try to describe it, because a lot of the constellations I tried manually caused a crash.

Oh no 😮

Admittedly, they both work together separately, but I feel that running ReShade through Special K has a few advantages:

  • Should eliminate the guesswork of finding the right API name for the dll (mainly for when the dxgi dll causes a crash and needs to be renamed)
  • Frees up the dll name for other uses (d3d9, etc.)
  • Running ReShade through the native UI feels more natural than running both together side-by-side, if that makes sense

So while it's not a "must-have", it's certainly nice to have, assuming that the two don't cause problems when they're loaded together like this.

Just throwing that out there because I realized that I didn't put it in the description above 😅

@CartoonFan
Copy link
Author

CartoonFan commented Sep 7, 2023

Assuming that ReShade + Special K eventually works, I was thinking that it might open up possibilities with dgVoodoo2, in order to easily use both programs (and others?) with older games.

Unfortunately, there are a few (significant?) obstacles:

  • The main repository was just archived today (https://github.com/dege-diosg/dgVoodoo2), meaning that progress is at a halt until there's a maintainer or an active fork
  • It doesn't appear to be open source 😞
  • There might be a lot of groundwork needed to get things working with STL

Still, after reading that Special K can load it as a plugin (https://wiki.special-k.info/en/SpecialK/dgVoodoo#enable-support-for-older-graphics-api), I thought it might be useful. It might even let us give #459 a happy ending 🤔 😁

P.S. If you somehow read this, @dege-diosg: would you consider making dgVoodoo2 open source? It'd help the software community out a lot in cases like this. Someone else could work on improving the project without redoing all the hard work you put into it, and then make it available for open source projects like this 💜 🙏

@sonic2kk
Copy link
Owner

sonic2kk commented Sep 7, 2023

The general concept here is good I think, but I don't think dgVoodoo2 specifically is very useful on Linux anymore.

There is a project called D8VK (based on DXVK) that translates D3D8 to Vulkan, and it should be merged into upstream DXVK imminently. Glide/DirectDraw is already handled by WineD3D which is pretty mature and performant even if it's based on OpenGL (EDIT: mature and performant for DirectDraw and Glide), though if you really want Glide-on-Vulkan, Zink can handle that (driver as part of Mesa that runs OpenGL-on-Vulkan). Vulkan doesn't automatically mean better performance, though, so the performance gains may be minimal or there may be no gains at all.

dgVoodoo2 running under Wine would essentially have to translate these Glide/DirectDraw/D3D8 calls to Direct3D 10/11 calls, which DXVK would then translate to Vulkan (D3D8 -> D3D10/11 -> Vulkan as opposed to D3D8 -> Vulkan). With WineD3D and with D8VK, this translation only has to happen once, meaning lower overhead and in principle should result in better performance - though I didn't check any benchmarks of WineD3D/D8Vk versus dgVoodoo2. It's very possible that this could result in poorer performance on Linux though, just like how Direct3D9Ex and d3d8to9 have worse performance under Wine, though the latter was occasionally needed historically in some modded games for compatibility, i.e. BetterSADX, from a pure performance standpoint I don't know of any cases where they helped performance on Linux the same way they do on Windows, because there is more overhead.

In other words, dgVoodoo2 would probably add more overhead and would not be worth it from this standpoint. On top of that, what dgVoodoo2 does is already mostly possible already, and the D3D8 side will be resolved once D8VK is merged into DXVK.

It would be fair to argue that dgVoodoo2 is more mature and may offer better compatibility. There could be game that dgVoodoo2 is needed for and that D8VK is not compatible with. But these cases are niche, and D8VK is in pretty good shape from what I understand. As well as this, given that dgVoodoo2 is proprietary and now archived, D8VK is still in active development and once merged into DXVK will continue getting improvements unlike dgVoodoo2, and those improvements will be specific to gaming on Linux, making D8VK more relevant to Linux gamers. In the case of compatibility it would be better to report that upstream and get those specific cases fixed rather than relying on a now-archived tool for the job.

In terms of actual implementation, adding support for dgVoodoo2 would not be difficult to my knowledge. It should be a case of downloading the DLL and putting it in the game prefix, which we do for several tools (ReShade, SpecialK, IGCS, probably others). I would be off-put by the proprietary nature, but actually implementing it would be possible, it's just a case of whether or not it's useful; my stance right now is that for Linux users it is not as useful as it once may have been. Lutris offers support for installing dgVoodoo2, but this has been in place since before DXVK was a thing, and was primarily for better D3D8 performance (since D3D8 -> D3D10 -> OpenGL may have been a better combination back then, as WineD3D was better equipped to handle basic D3D10 than D3D8).

Also, this is not to discredit the work that has been done on dgVoodoo2. The D8VK maintainer has credited this project as part of the development, and I'm sure on Windows the tool is very useful. I'm also very sure the maintainer put a lot of care into the project, but from a Linux gaming perspective, we have better options than we once did.

The happy ending for #459 will come in the form of D8VK being available in upstream DXVK :-)

@CartoonFan
Copy link
Author

The general concept here is good I think, but I don't think dgVoodoo2 specifically is very useful on Linux anymore.

There is a project called D8VK (based on DXVK) that translates D3D8 to Vulkan, and it should be merged into upstream DXVK imminently. Glide/DirectDraw is already handled by WineD3D which is pretty mature and performant even if it's based on OpenGL, though if you really want Glide-on-Vulkan, Zink can handle that (driver as part of Mesa that runs OpenGL-on-Vulkan). Vulkan doesn't automatically mean better performance, though, so the performance gains may be minimal or there may be no gains at all.

dgVoodoo2 running under Wine would essentially have to translate these Glide/DirectDraw/D3D8 calls to Direct3D 10/11 calls, which DXVK would then translate to Vulkan (D3D8 -> D3D10/11 -> Vulkan as opposed to D3D8 -> Vulkan). With WineD3D and with D8VK, this translation only has to happen once, meaning lower overhead and in principle should result in better performance - though I didn't check any benchmarks of WineD3D/D8Vk versus dgVoodoo2. It's very possible that this could result in poorer performance on Linux though, just like how Direct3D9Ex and d3d8to9 have worse performance under Wine, though the latter was occasionally needed historically in some modded games for compatibility, i.e. BetterSADX, from a pure performance standpoint I don't know of any cases where they helped performance on Linux the same way they do on Windows, because there is more overhead.

In other words, dgVoodoo2 would probably add more overhead and would not be worth it from this standpoint. On top of that, what dgVoodoo2 does is already mostly possible already, and the D3D8 side will be resolved once D8VK is merged into DXVK.

It would be fair to argue that dgVoodoo2 is more mature and may offer better compatibility. There could be game that dgVoodoo2 is needed for and that D8VK is not compatible with. But these cases are niche, and D8VK is in pretty good shape from what I understand. As well as this, given that dgVoodoo2 is proprietary and now archived, D8VK is still in active development and once merged into DXVK will continue getting improvements unlike dgVoodoo2, and those improvements will be specific to gaming on Linux, making D8VK more relevant to Linux gamers. In the case of compatibility it would be better to report that upstream and get those specific cases fixed rather than relying on a now-archived tool for the job.

In terms of actual implementation, adding support for dgVoodoo2 would not be difficult to my knowledge. It should be a case of downloading the DLL and putting it in the game prefix, which we do for several tools (ReShade, SpecialK, IGCS, probably others). I would be off-put by the proprietary nature, but actually implementing it would be possible, it's just a case of whether or not it's useful; my stance right now is that for Linux users it is not as useful as it once may have been. Lutris offers support for installing dgVoodoo2, but this has been in place since before DXVK was a thing, and was primarily for better D3D8 performance (since D3D8 -> D3D10 -> OpenGL may have been a better combination back then, as WineD3D was better equipped to handle basic D3D10 than D3D8).

Also, this is not to discredit the work that has been done on dgVoodoo2. The D8VK maintainer has credited this project as part of the development, and I'm sure on Windows the tool is very useful. I'm also very sure the maintainer put a lot of care into the project, but from a Linux gaming perspective, we have better options than we once did.

The happy ending for #459 will come in the form of D8VK being available in upstream DXVK :-)

I...did not know about all this. But this is great! You managed to answer all my concerns in a single comment 😆

The only other thing for older D3D APIs I really knew about was d3d8to9, but having something that integrates directly into DXVK will be amazing, even if it's only for a smaller amount of games relative to D3D9+. I really want to try using Zink more, but I remember it crashing games when I left it on by default. Maybe it's time to revisit some of those STL settings 😆

As always: thanks for your super informative comments. This was really the only major suggestion I had for STL; it already does a ton of stuff--usually without much issue--so there's not much more I can suggest. It sounds like you're more well-informed about the state of Linux software, in any case 😁

@sonic2kk
Copy link
Owner

sonic2kk commented Sep 8, 2023

The only other thing for older D3D APIs I really knew about was d3d8to9, but having something that integrates directly into DXVK will be amazing, even if it's only for a smaller amount of games relative to D3D9+.

It's definitely much less, but you'd be surprised at how many D3D8 games there are (D8VK wiki page with information on compatible games, problem games, as well as a link to the full PCGamingWiki list of D3D8 games, and a full list of compatible D8VK games). I was messing around with trying to get a D8VK winetricks verb merged in and when I looked around for testing, I found a shocking amount 😄 Though several popular ones that are on Steam may not use D3D8 by default as the Steam version is an "improved" version (i.e. Hotline Miami).

I should also mention that in terms of noticeable D8VK improvements, I have done minimal testing, but Touhou 6 ran much more smoothly at least. Other benefits of D8VK include the DXVK HUD being available, as well as dxvk.conf options, and the various environment variables including the DXVK framerate limit. So all-around D8VK has in my opinion more longevity and a better impact to Linux users.

As always: thanks for your super informative comments. This was really the only major suggestion I had for STL; it already does a ton of stuff--usually without much issue--so there's not much more I can suggest. It sounds like you're more well-informed about the state of Linux software, in any case

Heh, any improvements you can think of for STL I'm always open to hearing them. I mostly implement what I see as useful or things that I would actively use. Since there are so many options though it can be a bit tricky to stay on top of all of them, and I rely on user reports/suggestions to improve or revisit areas, like ReShade+SpecialK.


Getting back to ReShade+SpecialK, to my current understanding, ReShade and SpecialK together no longer cause a crash but they also don't work together. When ReShade is enabled, the SpecialK options box is invisible when the shortcut is pressed. It will activate and the cursor will change when moved into the box, but it won't be visible.

I haven't gotten a chance to fix the installation logic in #897 yet, I believe these are the steps I did manually by hand:

  • Copying d3dcompiler_47.dll into the same folder as the SpecialK DLL (and setting the DLL override to d3dcompiler_47=n,b, should be in the STL dropdown box under Wine options)
  • Putting both ReShade DLLs and both ReShade JSON files in a manually created SpecialK plugins folder at pfx/drive_c/users/steamuser/Documents/My Mods/SpecialK/PlugIns/ThirdParty/ReShade
  • Modifying the dxgi.ini file (or whatever the SpecialK INI filename is) to have the following:
[Import.ReShade64]
Architecture=x64
Role=ThirdParty
When=Early
Filename=C:\users\steamuser\Documents\My Mods\SpecialK\PlugIns\ThirdParty\ReShade\ReShade64.dll

Don't remember exactly if I did anything else, I remember it not consistently working or having to delete some ReShade.ini file from the game folder, but this is the approach I'm planning to test some more when I have some time. It essentially installs ReShade for SpecialK and then tells SpecialK that we want to use ReShade without having to start the game, enable it, then restart the game.

The When option may be helpful to play with, as Early means ReShade is loaded first and so SpecialK is affected by it (this could be why the UI is invisible, though that doesn't explain why the SpecialK "welcome bubble" still appears). I think PlugIn causes a crash. Perhaps Lazy would work, but I didn't test.

@CartoonFan
Copy link
Author

The only other thing for older D3D APIs I really knew about was d3d8to9, but having something that integrates directly into DXVK will be amazing, even if it's only for a smaller amount of games relative to D3D9+.

It's definitely much less, but you'd be surprised at how many D3D8 games there are (D8VK wiki page with information on compatible games, problem games, as well as a link to the full PCGamingWiki list of D3D8 games, and a full list of compatible D8VK games). I was messing around with trying to get a D8VK winetricks verb merged in and when I looked around for testing, I found a shocking amount 😄 Though several popular ones that are on Steam may not use D3D8 by default as the Steam version is an "improved" version (i.e. Hotline Miami).

I should also mention that in terms of noticeable D8VK improvements, I have done minimal testing, but Touhou 6 ran much more smoothly at least. Other benefits of D8VK include the DXVK HUD being available, as well as dxvk.conf options, and the various environment variables including the DXVK framerate limit. So all-around D8VK has in my opinion more longevity and a better impact to Linux users.

That's a huge list 😲

I was just thinking Max Payne/Deus Ex (forgot about Advent Rising, but that's one I played, too), only to find out that games like Deus Ex (Deus Ex has newer fan-made renderers, but out-of-the-box support is always great) and Soul Reaver use even older APIs! Touhou 6 was a big surprise, too--I wouldn't have known if you hadn't mentioned it 👍

As always: thanks for your super informative comments. This was really the only major suggestion I had for STL; it already does a ton of stuff--usually without much issue--so there's not much more I can suggest. It sounds like you're more well-informed about the state of Linux software, in any case

Heh, any improvements you can think of for STL I'm always open to hearing them. I mostly implement what I see as useful or things that I would actively use. Since there are so many options though it can be a bit tricky to stay on top of all of them, and I rely on user reports/suggestions to improve or revisit areas, like ReShade+SpecialK.

I will definitely keep this in mind 👍

Getting back to ReShade+SpecialK, to my current understanding, ReShade and SpecialK together no longer cause a crash but they also don't work together. When ReShade is enabled, the SpecialK options box is invisible when the shortcut is pressed. It will activate and the cursor will change when moved into the box, but it won't be visible.

Hmm...I definitely remember both things working side-by-side when they were loaded individually through STL--menus and all. I nuked my saves, though, so I didn't do an in-depth test 😅

Don't remember exactly if I did anything else, I remember it not consistently working or having to delete some ReShade.ini file from the game folder, but this is the approach I'm planning to test some more when I have some time. It essentially installs ReShade for SpecialK and then tells SpecialK that we want to use ReShade without having to start the game, enable it, then restart the game.

The When option may be helpful to play with, as Early means ReShade is loaded first and so SpecialK is affected by it (this could be why the UI is invisible, though that doesn't explain why the SpecialK "welcome bubble" still appears). I think PlugIn causes a crash. Perhaps Lazy would work, but I didn't test.

'Lazy' seems to be what the "Automatic Plugin System" uses (https://wiki.special-k.info/en/SpecialK/ReShade#automatic-plugin-system), so...might be worth a try? 😅

I'll have to see if I can try it myself with your instructions 👍

@sonic2kk
Copy link
Owner

sonic2kk commented Sep 8, 2023

Something I forgot to note is that I'm aware of your initial suggestion to put the ReShade DLLs in the game files and get SpecialK to load it that way, but that caused a crash for me I think. I would prefer to do this because using the game files is a lot more permanent than a prefix which can be cleared. I don't think I tried putting the ReShade DLLs in the game files and then changing the path of the ReShade DLL in the INI file though (changing it from pointing to the plugins folder to basically just ReShade64.dll or the equivalent absolute path). SpecialK may try to load the ReShade DLL If it's in the same folder as its DLL automatically and this may be broken for some reason though, so this case may not work.

If this is equivalent to the Lazy load maybe there's some deeper compatibility problem 😓

@CartoonFan
Copy link
Author

CartoonFan commented Sep 8, 2023

So I got it working...sort of. Somehow.

The main things that I found consistently need to be there are:

  • The ReShade DLL needs to already be in the game directory; STL copying it there during the startup process doesn't seem to work
  • d3dcompiler_47 needs to be in the game dir (I used an override, but I'm not sure if it's needed)
  • The compatdata dir needs to be fresh on every run. The "Delete compatdata" option (DELPFX) works great for this, but it might be kind of dangerous for saves and such

And that's it! Both overlays should be consistently available, and without the game crashing as well.
20230907235827_1

Some other notable points:

  • Editing dxgi.ini is not needed. Special K really does just load up the ReShade DLL and run with it
  • Loading the ReShade DLL through STL duplicates the name multiple times in the renaming area of the GUI each time "PLAY" is selected. From what I can guess, STL actually tries to copy the DLL however many times it appears in the field, causing a game crash (and adding a really long time to STL's game launch process)
  • I had a custom First run setup with directx2010 (not sure if it's relevant)
  • I haven't tried it yet with any shaders installed, but I wouldn't expect that to do anything out of the ordinary

Logs and stuff:
524220_specialk_reshade.conf.zip
524220_gamelaunch.log
steam-524220.log
524220_steamtinkerlaunch.log

Hope this helps! 💜 👍

@sonic2kk
Copy link
Owner

sonic2kk commented Sep 8, 2023

Thank you a ton for all your help, I've figured out how to get ReShade and SpecialK to "work" together. This is crazy stuff, but I'll try to keep it straightforward. The steps you provided were pretty important as well.

The long and short of this is there are two reasons the game will crash:

  • The ReShade.ini generated by SpecialK uses Windows line endings instead of Unix line endings, meaning probably Wine is failing to interpret this properly and causing a crash.
    • This is not an issue when using ReShade regularly from SteamTinkerLaunch, because we manually create and write to a default ReShade.ini so the line endings are always the Unix line endings.
  • d3dcompiler_47.dll causes a crash when using GE-Proton8-14, but causes a crash when used with Proton Experimental.
    • GE-Proton8-14 crashes when trying to read the WAV files at drive_c/users/steamuser/Documents/My Mods/SpecialK/Assets/Shared/Sound. This is why it appears that deleting the prefix fixed the issue, if you delete the WAV files, the game won't crash.
    • This could be a result of how Valve Proton and GE-Proton handle media differently (Proton uses Wine's own codec support, GE-Proton uses all GStreamer plugins including gst-plugins-ugly which could have legal concerns (see the gst-plugins-bad repo readme for more information). It's possible there's something that GE-Proton8-14's media codec plugins are doing that d3dcompiler_47 breaks, and vice versa.

You were correct about how to put ReShade into the game files, editing the SpecialK INI is entirely unnecessary, that was a helpful step in starting to figure all this out. From there I started trying to break the problem down and figure out what defines a working state and what changes between launches.

The directx2010 component you mentioned is part of what NieR:Automata needs to run, it's parts of its vanilla Steam install script, so it's a standard component that should be unrelated to this (it should not affect anything one way or the other).


Getting ReShade + SpecialK Working

Okay, now for the nitty-gritty. Let's start with how to get all of this in a working state. Some of this might seem strange but bear with me.

For the following, test with GE-Proton8-14 (at time of writing, latest GE-Proton):
2. Install SpecialK with SteamTinkerLaunch to a fresh game install (no ReShade yet)
3. Install ReShade manually into the game folder by copying over the ReShade32.dll/ReShade64.dll (depends on your game architecture -- NieR:Automata is 64bit, so for that game, use ReShade64.dll)
- Be sure to skip using d3dcompiler_47
5. Switch to using GE-Proton8-14 instead of SteamTinkerLaunch as the compatibility tool
6. Run the game once so that the ReShade.ini can be created, it will crash
7. Now onto the fun part: From Terminal, navigate to the game files, and run the command dos2unix ReShade.ini
- Alternatively, if you cannot, I'll attach a ReShade.ini you can copypaste into the game files
8. Run the game again, and you should see the ReShade and SpecialK OSD bubbles appearing at launch

For this part, test with Proton Experimental:

  1. Launch your game with Proton Experimental, it will crash
  2. Copy d3dcompiler_47_64.dll (or the 32bit one if you're using a 32bit game -- NieR:Automata is 64bit, so use d3dcompiler_47_64.dll) from ~/.config/steamtinkerlaunch/downloads/d3dcompiler_47/ into the same folder as your game EXE
  3. Rename the DLL to simply d3dcompiler_47.dll
  4. In your Steam launch options, add WINEDLLOVERRIDES="d3dcompiler47=n,b" %command%
  5. Launch with Proton Experimental again and the game should work
  6. Switch to GE-Proton8-14, and the game will crash
  7. Remove the WINEDLLOVERRIDE from your launch options, and GE-Proton8-14 should work again
  8. (Optional )Repeat until you go crazy, like I did ;-)

Test Results

In doing these steps, when not using SteamTinkerLaunch, SpecialK and ReShade should work together! Unfortunately in my testing, while they do both load, the SpecialK OSD disappears after NieR:Automata goes fullscreen, and when activating it with whatever the keyboard shortcut is (Ctrl+Shift+Backspace? I can't remember off-hand even though I just did it minutes ago...) the SpecialK dialog window will be invisible. I can see that it's active because my cursor changes, but I can't see it.

This is the same behaviour I mentioned before, but now I have confirmed it and gotten it to re-occur when not using ReShade as a specified plugin. I think this is something specific to my setup, as you showed in your screenshot that this is working on your end and displaying the SpecialK dialog properly.

For giggles, I tried installing vcredist2022 just in case, and no dice. The SpecialK UI still doesn't show up for me.

Explanation

The two components here causing problems are the ReShade.ini and d3dcompiler_47. The dos2unix command changes the line endings of the ReShade.ini to use Unix line endings, which fixes one component of the crash.

The other component is d3dcompiler_47, which for some reason is incompatible with GE-Proton8-14 when SpecialK tries to read its audio files at ``drive_c/users/steamuser/Documents/My Mods/SpecialK/Assets/Shared/Sound. If you delete the Assets` folder and launch the game, it'll work with the `d3dcompiler_47` override enabled. When deleting the prefix this folder is deleted along with it, which is why it appears as though deleting the prefix solves the problem. This folder is re-created on each game launch with SpecialK, which is why the crash happens on subsequent launches. In my tests, every WAV file causes this, so it isn't specific to one of them. I thought perhaps one of them was "bad" in some way, but it seems not -- Probably just an issue with trying to read the `.wav` files in general. Though I never tested replacing those SpecialK WAV files with custom ones I know are "good", but I assume it would still crash.

Interestingly, d3dcompiler_47.dll is still required when using ReShade without SpecialK, as of my testing for #881. SpecialK is doing some magic I think!

ReShade INI file

The ReShade.ini issue doesn't happen when using ReShade standalone with STL because STL generates the ReShade.ini itself, whereas with SpecialK, this is generated when ReShade is loaded, and ReShade generates it with the Windows line endings. SteamTinkerLaunch on the other hand just writes out some hardcoded values to the file using echo (which will always use the appropriate line endings -- That's why it displays things correctly in Terminal, too)

The D3D Debacle

The d3dcompiler_47 issue is a bit more tricky. My assumption is that it's to do with how Valve Proton and GE-Proton handle media codecs. Media codecs and the rights to them, the rights to use them, and much more, are a big legal thing. Basically, when Wine has to read a media file, there needs to be a defined implementation on how to do this. Wine has to write its own implementations that are fully legally-safe (this is especially important for a company like Valve). This is usually more reliable and better for longevity, but means that some things may not work. If you've ever had a game on Linux with missing cutscenes, desynced cutscenes, missing or distorted audio etc, that's because of Proton using the "pure-Wine" codec implementations.

GE-Proton8-14 takes a different approach, in the interest of compatibility. There's a set of media decoding libraries on Linux called GStreamer, and they're separated into multiple packages. The one we're interested in is gstreamer-plugins-ugly. These are the plugins that may be legally problematic. It isn't too dissimilar from using various Winetricks to fix game cutscenes, or the infamous mf-install (Valve don't allow any mention of this on the issue tracker for legal reasons, I'm sure kisak-valve is tired of typing "the workaround you have linked is legally problematic and has been removed"). GE-Proton uses these plugins in the interest of maximising compatibility, and they aren't the only ones -- I've used packages in the past that specify an optional dependency on the ugly GStreamer plugins.

The d3dcompiler_47 appears to be the culprit, somehow, for crashing the game when trying to read the WAV files, and this is conflicting with GE-Proton.

SpecialK+ReShade+SteamTinkerLaunch (on master)

Using these three programs with SteamTinkerLaunch is problematic for two reasons (assuming you are installing ReShade and SpecialK together):

  1. SteamTinkerLaunch will always install d3dcompiler_47 to the game files and set the override, meaning the game will always crash with GE-Proton8-14.
  2. For the manual ReShade installation, SteamTinkerLaunch tries to be intelligent and guess when the user had an existing ReShade install unmanaged by STL, and gracefully assimilate itself with it, as well as when the user had a previously disabled ReShade install. If there's a ReShade.ini in the game files but USERESHADE is off, STL will assume the ReShade INI should be renamed to ReShade.ini_off. When you turn off ReShade with STL, among other things it renames any existing ReShade.ini. This is before game launch, and when the game launches with SpecialK and ReShade, ReShade will create its ReShade.ini with the bad line endings, and causes bad times.

By doing a lot of really hacky changes in the code locally I was able to stop SteamTinkerLaunch from doing these steps and I got ReShade and SpecialK to work together. This is not something that would be PR-ready by any means, it isn't a solution, but it helped me understand what SteamTinkerLaunch was doing to break things. And in short, it's some ReShade detection logic conflicting.

As it stands right now, even with #897, ReShade+SpecialK cannot be used together with SteamTinkerLaunch as out-of-the-box as I would like, and may require regular manual intervention on each boot or with a Proton version change. But that's no fun, who doesn't want to use SteamTinkerLaunch?! 😉 We need a path forward for getting these two to be friends with SteamTinkerLaunch.

How to Fix?

So we know now that to get things working normally, we need to get the ReShade INI to use the proper line endings.

To fix things, the first step is to install ReShade differently when using SpecialK. This should not be too difficult as we just have to copy the DLLs un-renamed into the game files -- We don't have to edit the SpecialK INI at all. The ReShade issue shouldn't be too much of a problem if we install ReShade with SteamTinkerLaunch, as if we have ReShade + SpecialK on, we should properly know when we have installed ReShade.

The problem comes with the d3dcompiler_47.dll. We can do a check for whether or not the user is using GE-Proton or not, but my concern is, what if GE-Proton starts requiring it? Having this kind of hard-coded check will work today but in future it could become an annoying maintenance cost. Forcing users to use GE-Proton is also not ideal, in cases where there could be compatibility issues only fixed in, say, Proton Hotfix.

Having a checkbox for this option is also tricky too, because then we would have to forego the automatic detection of GE-Proton (having a dynamic checkbox like this could be tricky). It may not be clear to a user when to use it, and while it should be documented on the wiki, it is a very bizarre problem that we're essentially hacking in a way to work around.

So basically, we need to know how best to handle d3dcompiler_47 in combination with SpecialK, ReShade, ReShade being used first and then SpecialK, and various constellations of ReShade being installed and uninstalled.

  • I don't think we currently handle this, but we should be handling uninstalling existing ReShade installs if it's installed before SpecialK (to avoid DLL name conflicts such as dxgi.dll conflicting with SpecialK)
  • We need to handle ReShade being turned on and off, and knowing when it's turned back on that SpecialK is enabled too, so it knows how to re-enable itself properly (this may be handled, I haven't delved too deep yet)
  • We need to know when and how to use d3dcompiler_47. The fact is we MUST use it for Proton Experimental to work, but we CANNOT use it with GE-Proton8-14. How we handle this is undecided for now 😅

Caveats

This doesn't cover the issue I'm having where the SpecialK UI doesn't show up. It's something we'll need to document on the wiki at least, but if it's affecting me it's not out of the question that at least one other user could run into this. I think even when we implement this feature request we should still keep the caveats that ReShade+SpecialK can be problematic, just to cover ourselves 🙂

There's a concern that, when writing out to the ReShade INI, the line endings could change again. We may need to modify the ReShade line endings on each game launch with dos2unix if this is the case. We can just check if there is a ReShade.ini and what line endings it has, and convert it on each boot if it's using Windows line endings, to avoid game crashes.

Finally, I only tested with Proton 8.0-3 (briefly, it has the same behaviour as Experimental), Proton Experimental, and GE-Proton8-14. I didn't try older GEs, I didn't try Proton Hotfix, or Proton Experimental with the Bleeding Edge beta, or any Proton-tkg builds. To be honest, I would be scared to find out how those behave... 😓


So in the end, ReShade and SpecialK do work together now. In fact, it may have always worked, and the compatibility was just due to these weird parameters required to get it to work. It may have seemed like they don't work together and always crashed, because getting them to work requires different and specific steps (and currently it has to all be done manually

Okay, I spent well over an hour collating all this and writing it out, and I've probably missed something silly, but I hope this was insightful and useful. And hopefully you can reproduce the same results I can, but those are my findings for now. It seems we're onto a path of getting ReShade+SpecialK to at least not crash games when used together.

I'll probably heavily rework #897 because more work will be needed to get these two to work than just uncommenting the code written previously.

I see a future for SpecialK+ReShade in SteamTinkerLaunch :-)

@CartoonFan
Copy link
Author

Wow. That's a...lot to digest 😄

I've skimmed through it (no disrespect intended to your time and efforts), but there was something I wanted to mention.

In doing these steps, when not using SteamTinkerLaunch, SpecialK and ReShade should work together! Unfortunately in my testing, while they do both load, the SpecialK OSD disappears after NieR:Automata goes fullscreen, and when activating it with whatever the keyboard shortcut is (Ctrl+Shift+Backspace? I can't remember off-hand even though I just did it minutes ago...) the SpecialK dialog window will be invisible. I can see that it's active because my cursor changes, but I can't see it.

This is the same behaviour I mentioned before, but now I have confirmed it and gotten it to re-occur when not using ReShade as a specified plugin. I think this is something specific to my setup, as you showed in your screenshot that this is working on your end and displaying the SpecialK dialog properly.

This doesn't cover the issue I'm having where the SpecialK UI doesn't show up. It's something we'll need to document on the wiki at least, but if it's affecting me it's not out of the question that at least one other user could run into this.

Besides crashes, I actually was getting the invisible Special K UI pretty frequently--usually when I was editing dxgi.ini, per the wiki. I guess I just didn't think a screenshot of an invisible UI was worthwhile 😅

All that is to say: you and I both experienced the same problem, but I guess I forgot to mention it 😳

But yeah, this whole thing is completely bonkers. If you're still curious, though: it is Ctrl+Shift+Backspace. Forgetting stuff I just did happens to me, too 😂

If you'll allow me another distantly-related tangent: apparently someone semi-recently started working on vkShade, a vkBasalt fork that focuses on ReShade compatibility (link here: https://github.com/ralgar/vkShade). Likely not much there yet, but I figured that I'd put it on your radar to see if it has potential. Hopefully, it won't be as complex as this issue 😆

One last thing:

For the following, test with GE-Proton8-14 (at time of writing, latest GE-Proton):
2. Install SpecialK with SteamTinkerLaunch to a fresh game install (no ReShade yet)
3. Install ReShade manually into the game folder by copying over the ReShade32.dll/ReShade64.dll (depends on your game architecture -- NieR:Automata is 64bit, so for that game, use ReShade64.dll)

  • Be sure to skip using d3dcompiler_47
  1. Switch to using GE-Proton8-14 instead of SteamTinkerLaunch as the compatibility tool
  2. Run the game once so that the ReShade.ini can be created, it will crash
  3. Now onto the fun part: From Terminal, navigate to the game files, and run the command dos2unix ReShade.ini
  • Alternatively, if you cannot, I'll attach a ReShade.ini you can copypaste into the game files
  1. Run the game again, and you should see the ReShade and SpecialK OSD bubbles appearing at launch

For this part, test with Proton Experimental:

  1. Launch your game with Proton Experimental, it will crash
    2. Copy d3dcompiler_47_64.dll (or the 32bit one if you're using a 32bit game -- NieR:Automata is 64bit, so use d3dcompiler_47_64.dll) from ~/.config/steamtinkerlaunch/downloads/d3dcompiler_47/ into the same folder as your game EXE
    3. Rename the DLL to simply d3dcompiler_47.dll
    4. In your Steam launch options, add WINEDLLOVERRIDES="d3dcompiler47=n,b" %command%
    5. Launch with Proton Experimental again and the game should work
    6. Switch to GE-Proton8-14, and the game will crash
    7. Remove the WINEDLLOVERRIDE from your launch options, and GE-Proton8-14 should work again
    8. (Optional )Repeat until you go crazy, like I did ;-)

You still want me to test these two, right? It reads like it, but it also seems like you got your answer as well, so I'm not 100% sure 🙏

@sonic2kk
Copy link
Owner

sonic2kk commented Sep 8, 2023

If you have some time and are willing absolutely feel free to test! It might give a bit more confidence to the goal of adding SpecialK+ReShade to know these steps are reproduceible and isn't a case of "it works on my machine" 😅

Besides crashes, I actually was getting the invisible Special K UI pretty frequently--usually when I was editing dxgi.ini, per the wiki. I guess I just didn't think a screenshot of an invisible UI was worthwhile

Hmm, I wonder what causes it... I would normally suggest reporting it upstream, but I'm not so sure upstream is friendly to Linux users (previous maintainer's forum threads were marked as spam for example).

If you'll allow me another distantly-related tangent: apparently someone semi-recently started working on vkShade, a vkBasalt fork that focuses on ReShade compatibility (link here: https://github.com/ralgar/vkShade). Likely not much there yet, but I figured that I'd put it on your radar to see if it has potential. Hopefully, it won't be as complex as this issue

This looks very neat! It should be very straightforward to add support for this if it takes off (and would solve the issue of ReShade not working for Linux games). ReShade+STL already work standalone but just not with SpecialK, though this would resolve it.

From looking at the wiki, if one was to build it right now, it could still be used with STL by adding ENABLE_VKSHADE=1 to the per-game environment variables file, but we could add a separate checkbox for it if it takes off and compatibility is good. Thank you for putting this on my radar!


I think at the very least, implementing support for ReShade+SpecialK (as in, not just disabling it like we do now) would be useful, and in future if someone figures out a way to fix the invisible UI (either via a Proton/maybe more along the lines of DXVK/etc fix) then we will have support. We can document the invisible UI on the wiki as a known issue with no solid workaround yet, and note that using ReShade and SpecialK is not advised.

Maybe at some point in the future we will be able to advise using vkShade in place of this!

@CartoonFan
Copy link
Author

If you have some time and are willing absolutely feel free to test! It might give a bit more confidence to the goal of adding SpecialK+ReShade to know these steps are reproduceible and isn't a case of "it works on my machine" 😅

Sure. I'll give it a try after I rest my mind for a bit.

This looks very neat! It should be very straightforward to add support for this if it takes off (and would solve the issue of ReShade not working for Linux games). ReShade+STL already work standalone but just not with SpecialK, though this would resolve it.

From looking at the wiki, if one was to build it right now, it could still be used with STL by adding ENABLE_VKSHADE=1 to the per-game environment variables file, but we could add a separate checkbox for it if it takes off and compatibility is good. Thank you for putting this on my radar!

You're welcome! I had totally forgotten that vkBasalt/vkShade weren't limited to Linux 😅

I think at the very least, implementing support for ReShade+SpecialK (as in, not just disabling it like we do now) would be useful, and in future if someone figures out a way to fix the invisible UI (either via a Proton/maybe more along the lines of DXVK/etc fix) then we will have support. We can document the invisible UI on the wiki as a known issue with no solid workaround yet, and note that using ReShade and SpecialK is not advised.

We went from "deprecated" to "sorta working", so that's fine with me 👍

Maybe at some point in the future we will be able to advise using vkShade in place of this!

I totally support this. The more high-quality native programs we can use, the better, IMO 👍

@sonic2kk
Copy link
Owner

sonic2kk commented Sep 8, 2023

I have sort of fixed the invisible UI by renaming from dxgi.dll to d3d11.dll. Someone mentioned that this broke Monster Hunter World for them on the Steam forums, but I decided to try it for fun and it actually fixed it... kinda.

20230908214128_1

The OSD for ReShade doesn't show up on boot, only the one for SpecialK, but pressing Home will still open ReShade, and Ctrl+Shift+Backspace also opens the SpecialK menu.

However this creates a ReShade.ini with a lot of funky options that then cause the game to crash on subsequent boots. The one dxgi.dll creates, and the one SteamTinkerLaunch create, are only about 300 bytes and look like this:

[GENERAL]
EffectSearchPaths=.\,.\reshade-shaders\Shaders
TextureSearchPaths=.\,.\reshade-shaders\Textures
PresetPath=.\ReShadePreset.ini

[OVERLAY]
NoFontScaling=1

[STYLE]
EditorFont=ProggyClean.ttf
EditorFontSize=13
EditorStyleIndex=0
Font=ProggyClean.ttf
FontSize=13
StyleIndex=2

But the one that is created after launching the game with SpecialK named as d3d11.dll is much different, and is almost 2kb. So the ReShade INI is borked somehow. I have no idea what is broken in it, it doesn't appear to be related to the line endings, but that bears further investigation!

This keeps getting weirder...

@sonic2kk
Copy link
Owner

sonic2kk commented Sep 8, 2023

Found out why the new ReShade.ini makes it crash, it's the paths part of the [SCREENSHOT] section in the INI file:

[SCREENSHOT]
ClearAlpha=1
FileFormat=1
FileNaming=%AppName% %Date% %Time%
JPEGQuality=90
PostSaveCommand=
PostSaveCommandArguments="%TargetPath%"
PostSaveCommandNoWindow=0
PostSaveCommandWorkingDirectory=.\
SaveBeforeShot=0
SaveOverlayShot=0
SavePath=.\
SavePresetFile=0
SoundPath=

Removing PostSaveCommandWorkingDirectory and SavePath make the game launch again. These are re-added after launch though. If STL could automatically set a sane value in cases where it's just .\, we may be onto something.

@CartoonFan
Copy link
Author

CartoonFan commented Sep 28, 2023

Thanks for the example, it helped me understand what to look for and where to look (also I'm a hardcore Steins Gate VN fan).

I haven't played it myself, but I guessed as much from seeing your latest release https://github.com/sonic2kk/steamtinkerlaunch/releases/tag/v12.12

Though sadly, I can't figure out how to get the SpecialK OSD to work. I tried a few different combinations of things, and didn't find much online apart from people having to disable certain "GPU driver software" functions to try and get it to work. For Linux, I pretty much only found people asking how to use SpecialK on Linux. One article mentions the SpecialK OSD at the very bottom but no instructions on how to use it.

I tried HoloCure, NieR:Replicant, and NieR:Automata with no success. I tried tweaking any and all options that looked somewhat relevant in the INI. My guess is maybe however it tries to render doesn't work with DXVK (I did try PROTON_USE_WINED3D=1 but it crashes with the DLL overrides

I'm trying HoloCure now. It's taking a really long time to load for some reason, but I'll see if it crashes on my end as well 😁

Maybe SpecialK can't get the information it needs to draw the overlay or get the system information it needs, I'm not sure if it's really designed to work outside of Windows. It may be trying to hook into some specific Windows libraries that it can't get, maybe something GPU-specific.

If you're in any of the socials or know where to ask, it may be worth asking if this feature does anything that isn't expected to work under Wine.

I tried asking on their Discord. We'll have to see how it goes 🤞

Interestingly, I couldn't get STEINS;GATE or STEINS;GATE 0 to load SpecialK. I have the Committee of Zero patch installed for both of them so that might be why, though I suspect it's more to do generally with the launcher the game uses messing with the DLL override.

Oh no. Did I open up another rabbit hole? 😅


To be honest, I think I'm getting kinda burnt out with all this 😅

Maybe I just need to take a break? 🤔

@sonic2kk
Copy link
Owner

I think we can close this issue to be honest, the d3dcompiler thing is something that (seemingly?) only affects me, and it isn't directly related to this issue :-) We've cleared up 99% of this, some SpecialK-specific features aren't working and they can be investigated and tackled separately.

Thanks a lot for your suggestions and active participation, I think we did really good here! If you feel it should be re-opened please do re-open, but I think we can close it as you suggested earlier on.

This isn't dismissing the SpecialK OSD issue by any means, but closing this issue will help bring a close to the discussion on ReShade+SpecialK here, and once we're a bit less burned out, other issues you find can be investigated separately :-)

@CartoonFan
Copy link
Author

Sorry to end this whole experience on such a low note. Just kinda lost motivation during that last bit--especially since the issue was technically resolved a little while ago.

Thanks a lot for your suggestions and active participation, I think we did really good here! If you feel it should be re-opened please do re-open, but I think we can close it as you suggested earlier on.

Thanks for your help and kind words 😁 💜

This isn't dismissing the SpecialK OSD issue by any means, but closing this issue will help bring a close to the discussion on ReShade+SpecialK here, and once we're a bit less burned out, other issues you find can be investigated separately :-)

Got it 🫡


Including this comment, we had 127 comments spread over 3-ish bugs and a slew of pull requests. I think we've earned a break 😁

Hope to work together with you again in the future! 💜 🙏

@sonic2kk
Copy link
Owner

sonic2kk commented Oct 7, 2023

Just a small update on this, I revisited the d3dcompiler_47 thing today and I'm making some progress on it. I basically went with the approach of using d3dcompiler_47 if it's already in the game files, as it was the most straightforward to implement. Coming back with fresh eyes helps it seems!

Basically, d3dcompiler_47 was already skipped if it existed in the game files. So if /path/to/game-dir/d3dcompiler_47.dll did not already exist, STL just skipped it. Otherwise it would copy it over. So for the feature I had in mind we only had to implement the part where we can toggle and remove the DLL if it wasn't added by STL, which we can tell based on whether or not it's in SpecialK_enabled.txt. If this is the case, and the toggle for this feature is off, then remove our tracked d3dcompiler_47 DLL from the game files and SpecialK_enabled.txt.

When using ReShade+SpecialK, d3dcompiler_47 for SpecialK will take priority, as it gets installed first and by the time ReShade tries to install it, it'll be flagged as already present and so won't get tracked by ReShade. When using ReShade, d3dcompiler_47 should not cause any compatibility issues, at least from my tests, so there is no toggle for ReShade. This is exclusively for SpecialK.

This approach also means that by default, if d3dcompiler_47 already exists in the game files, we will use the one in the game files instead of our own, so your idea will work here 😄


I have only done very light testing locally basically to ensure STL doesn't explode (a good first step for developing anything) and will do some more testing and get a PR opened soon hopefully :-)

@CartoonFan
Copy link
Author

Sounds pretty cool! 😁

On the ReShade testing side, I found that I had to explicitly load the ReShade DLL in Monster Hunter: World as an "Early" plugin to get it to consistently work with Special K.

[Import.ReShade64]
Architecture=x64
Role=ThirdParty
When=Early
Filename=Z:\home\jeremiah\.local\share\Steam\steamapps\common\Monster Hunter World\ReShade64.dll

It's the only game so far where I've had to do that, though 🤷

@sonic2kk
Copy link
Owner

sonic2kk commented Oct 8, 2023

Updated the ReShade wiki with this information, as well as a link to the upstream SpecialK wiki page which also seems to suggest a similar tweak :-)

@CartoonFan
Copy link
Author

Thanks! 💜 🙏

@CartoonFan
Copy link
Author

It's super weird to come back to this again, but it looks like Special K (in one of its nightly releases) recently added something new to its support for ReShade:
1703340353

Unfortunately (?), I can't really test it out, because it conflicts with the ReShade INI that Steam Tinker Launch copies in:
1703340371

Since this feature is new, I assume there's not a..."Special K ReShade INI compat" option there, right?

What do you think? Does this option seem like it's worth supporting? 🤔

Thanks as always! 😁

@sonic2kk
Copy link
Owner

Thanks for keeping me posted on this!

While I think a "Special K ReShade INI compat" option might not be the right name, how about an option (on by default) to disable creating a ReShade INI? This could be generally useful, if a user would rather insert their own for any reason, including for this new SpecialK option.

I think this option should be on by default (which preserves existing behaviour and would be better to keep imo). I don't know if this option should remove an existing ReShade INI though, that could be a bit problematic. A user could manually remove / rename the existing INI from the game files, then disable the checkbox and the INI will not get re-created.

Can you test if removing the file at runtime fixes the issue? That is, launching the game, then removing the INI from the game files, and then opening the SpecialK menu?

The behaviour would then become something like this:

  • A new checkbox under the ReShade options, called something like "Create ReShade INI File" -- This is ON by default and thus, by default, there would be NO change to existing behaviour. My justification for this is that disabling INI creation is something a user should go out of their way to do, and shouldn't be the default. But giving control over this allows for solving some use-cases, such as the one you have shown here
  • When the checkbox is disabled, SteamTinkerLaunch will not create the ReShade INI file, BUT crucially it WON'T remove an existing INI, to prevent losing a configuration file. Renaming it may also not be ideal, STL clearing the INI file may not be a good move and instead a user should deliberately take this action themselves.
    • On one hand, if a user does the following path, this proposed behaviour would get annoying: Starts game with ReShade+SpecialK -> Sees the warning message that the ReShade INI already exists -> Closes game -> Disables the "Create ReShade INI file" option -> Launches game again -> Still sees the warning message -> Hopefully figures out to check the game files and has to remove the file manually
    • On the other hand, avoiding removing files on the user's behalf means if the option is accidentally disabled, they won't lose a config file. The name of the checkbox will also hopefully make it clear that it refers to creating the INI file, meaning it only applies on the first install of ReShade for that game. We can also note this on the tooltip for the checkbox.
  • Enabling the option again when a ReShade INI is already present will have no effect.
  • Enabling the option again with no ReShade INI present... should create the INI. This should come already from the existing code, I think this is created on each startup if ReShade is enabled.
  • Document somewhere on the ReShade or SpecialK wiki pages (or both) that this option can be used to manage a ReShade INI(?)

Am I understanding correctly that a checkbox to just disable creating a ReShade INI could also solve the issue? That could be a very straightforward fix as from a cursory glance it seems we only create the INI in one place in the code :-)

@CartoonFan
Copy link
Author

CartoonFan commented Dec 24, 2023

Thanks for keeping me posted on this!

No problem! 👍

While I think a "Special K ReShade INI compat" option might not be the right name,

I'm admittedly not the best at naming things 😅

how about an option (on by default) to disable creating a ReShade INI? This could be generally useful, if a user would rather insert their own for any reason, including for this new SpecialK option.

Sure, that sounds fine.

I don't know if this option should remove an existing ReShade INI though, that could be a bit problematic.

Renaming it may also not be ideal

Maybe a simple rename+backup might be enough? 🤔

Sometimes I'll tweak some settings and then delete the file without saving them elsewhere 🤣

Can you test if removing the file at runtime fixes the issue? That is, launching the game, then removing the INI from the game files, and then opening the SpecialK menu?

Unfortunately, this didn't work--at least, not for me. Special K doesn't seem to create the INI--or even load the plugin--if I remove the INI while the game is running 😕

Thankfully, it's HoloCure, so you're welcome to see if it's the same on your end. Could just be another weird anomaly with my setup 😆

Am I understanding correctly that a checkbox to just disable creating a ReShade INI could also solve the issue? That could be a very straightforward fix as from a cursory glance it seems we only create the INI in one place in the code :-)

I feel like...that should work? I mean, I can't say for sure, but the tooltip mentions an "SK managed configuration", so I'd assume it'd make the INI if it's not present at launch 🤔


In other, marginally related news: it seems that the vkShade repo (https://github.com/ralgar/vkShade) was archived, and then deleted 😞

Before it was deleted, the maintainer cited Gamescope's ReShade compatibility as the reason. It sounded like they thought Gamescope's feature support would easily surpass vkShade's, so they archived the project. Not sure why it was deleted, though 😕

Anyway, that's the state of things! I feel like Special K is just about at the point where they're officially supporting ReShade, so hopefully this can simplify running games like Monster Hunter: World 🙏

Hope to hear back soon! 🙏 💜

@sonic2kk
Copy link
Owner

Seems like the way forward is the checkbox then! I'll work on it probably close to the end of the year at this point (maybe squeeze in a v14.0.20231231? 😉). It's been a busy month!

I'll also do some testing myself with HoloCure and a couple other games.

In other, marginally related news: it seems that the vkShade repo (https://github.com/ralgar/vkShade) was archived, and then deleted 😞

Before it was deleted, the maintainer cited Gamescope's ReShade compatibility as the reason. It sounded like they thought Gamescope's feature support would easily surpass vkShade's, so they archived the project. Not sure why it was deleted, though 😕

I had noticed not that long ago that it was archived, maybe a week ago at most it feels like? It was very recently that I had noticed this, I had gotten emails when the threads I commented in were closed. I had also saw that justification and can see where the maintainer was coming from, but I'm fairly sure they also mentioned that they would keep the repository archived for historical purposes. That's fairly surprising that it was removed... I hope nothing bad happened. The author is still on GitHub, and I'm not going to criticize them at all for removing it, hopefully it was a positive decision on their end though :-)

Anyway, that's the state of things! I feel like Special K is just about at the point where they're officially supporting ReShade, so hopefully this can simplify running games like Monster Hunter: World

That would be pretty great. And of course I'm always willing about hearing anything that needs to be done on the STL end. I haven't had too much time recently for much development (any development time I have had has been spent on trying to plan out how to do the Non-Steam Game categories + localconfig.vdf editing shenanigans).


I'll try to make some time for this before the end of the year, it may bleed into early next year though 😅

@CartoonFan
Copy link
Author

That's fairly surprising that it was removed... I hope nothing bad happened. The author is still on GitHub, and I'm not going to criticize them at all for removing it, hopefully it was a positive decision on their end though :-)

Yeah, definitely. Before this, I was just going to comment that it had been archived--since we both posted there--but after following the link and seeing it had been removed...hopefully everything's all right 😟

That would be pretty great. And of course I'm always willing about hearing anything that needs to be done on the STL end. I haven't had too much time recently for much development (any development time I have had has been spent on trying to plan out how to do the Non-Steam Game categories + localconfig.vdf editing shenanigans).

Oh, I haven't heard about this! Never mind; I just read the roadmap 😆

I've heard about hiding Steam games, but not adding them to any kind of favorites list. Is this a thing? Seems like it could be pretty useful if Steam supports it 🤔

I'll try to make some time for this before the end of the year, it may bleed into early next year though 😅

Totally understand. It's the holidays, after all.

Since it might be relevant for future testing, as well--I can post more a detailed summary in #968 if you want--the aftermath of the Steins;Gate testing (which still has issues, BTW) is that STL, Steam, and a few other apps have relatively new configs on my machine. I wiped out the Steam directory, too, so if something seems different from my previous comments, that might be why 😆

As always: thanks for your support and consideration on...a bunch of these issues 😅

I try to do as much as can on my own, but sometimes I don't know how to proceed, so...thanks for listening and offering advice 👍 💜

@sonic2kk
Copy link
Owner

sonic2kk commented Dec 27, 2023

Initial, almost entirely untested, very WIP PR is up at #1000. I will hopefully get this merged before the New Year, should be a straightforward test :-)

Also, this is the first 4-digit #, kinda crazy to see it!

@CartoonFan
Copy link
Author

Initial, almost entirely untested, very WIP PR is up at #1000. I will hopefully get this merged before the New Year, should be a straightforward test :-)

Thanks 😁. I'll be here to help if you need me 👍

Also, this is the first 4-digit #, kinda crazy to see it!

Definitely. You, the previous maintainer, and the users--we all worked together to get here 😆

Stay strong! 😄 👍 💜

@sonic2kk
Copy link
Owner

sonic2kk commented Jan 3, 2024

Pending some PR housekeeping and preparing wiki updates, #1000 is ready to merge, but there is a slight caveat I found.

With just ReShade, the PR in my tests works as expected across three separate games (HoloCure, NieR:Automata, NieR:Replicant). By "works" I mean the game will load up with ReShade on and the INI will be created by default, and the "Create ReShade INI" checkbox won't (re-)create an INI file. If one exists however, it will not remove it.

I didn't test with the latest SpecialK nightly, but I did notice that for NieR:Replicant and NieR:Automata, SpecialK will create a ReShade.ini file if using ReShade+SpecialK (both with ReShade as a plugin and with both DLLs loaded separately). This also happens without SteamTinkerLaunch, but I was able to confirm that it is not the same INI file as the one STL creates (it's much longer, STL just creates a basic one with some shader paths but SpecialK creates a very detailed one). The option you discussed may stop SpecialK from creating a ReShade INI file to begin with, so this may be a non-issue, but it is something I found that I wanted to make a note of, in case you also run into this.

But either way, #1000 does prevent SteamTinkerLaunch from creating the INI, and the PR should be ready to merge soon. Once merged, anything you find with regards to how this may/may not work with SpecialK can be documented on the wiki, such as required versions, game-specific quirks if you find any that might be relevant, and perhaps there were relevant changes in the SpecialK Nightly to accompany this new feature that we will need to explicitly note as well :-)

(P.S. I considered a way to manually remove a ReShade INI if we have SpecialK enabled, but a user may want to preserve this INI so I didn't want to remove it for similar reasons as to why I don't want disabling the checkbox to remove the INI. It also isn't very feasible to do it this way either, even if we did try a check to assume this was the first launch of SpecialK+ReShade and also that before launch the INI didn't exist, we have no way of knowing when SpecialK will create this INI and it could be with considerable delay, plus SpecialK may re-create it again at its will.)

@CartoonFan
Copy link
Author

Pending some PR housekeeping and preparing wiki updates, #1000 is ready to merge, but there is a slight caveat I found.

With just ReShade, the PR in my tests works as expected across three separate games (HoloCure, NieR:Automata, NieR:Replicant). By "works" I mean the game will load up with ReShade on and the INI will be created by default, and the "Create ReShade INI" checkbox won't (re-)create an INI file. If one exists however, it will not remove it.

Awesome 😁

I didn't test with the latest SpecialK nightly, but I did notice that for NieR:Replicant and NieR:Automata, SpecialK will create a ReShade.ini file if using ReShade+SpecialK (both with ReShade as a plugin and with both DLLs loaded separately).

From what I understand, the current SpecialK nightly (24.1.1.2) crashes with a white screen on NieR: Automata. I had to use a custom SpecialK (modified from 23.12.27.2?) from their Discord to get it to work. Just a heads up so you don't need to rack your brain like I did trying to figure it out 😆

NieRːAutomata™ 2024-01-02 17ː06ː21


Also, I saw your recent comments on the PR--hope you get well soon 💜 🙏

@sonic2kk sonic2kk linked a pull request Jan 4, 2024 that will close this issue
4 tasks
@sonic2kk
Copy link
Owner

sonic2kk commented Jan 4, 2024

#1000 was merged and the ReShade wiki page was updated to note the use-case mentioned in this issue (for some SpecialK usage). It can also be generally useful, for any reason (maybe a downstream program would want to insert their own INI, who knows :-)).

As I noted the versions of SpecialK I used will create an INI, but this is unrelated to SteamTinkerLaunch, and I hope perhaps the INI that SpecialK generates will be more compatible in some way / maybe with these new ReShade options in SpecialK it will already or soon start to allow not generating the INI.

But in my tests, outside of an external source creating the INI file, disabling the checkbox will prevent SteamTinkerLaunch from creating one :-)

Happy gaming!

@CartoonFan
Copy link
Author

#1000 was merged and the ReShade wiki page was updated to note the use-case mentioned in this issue (for some SpecialK usage). It can also be generally useful, for any reason (maybe a downstream program would want to insert their own INI, who knows :-)).

As I noted the versions of SpecialK I used will create an INI, but this is unrelated to SteamTinkerLaunch, and I hope perhaps the INI that SpecialK generates will be more compatible in some way / maybe with these new ReShade options in SpecialK it will already or soon start to allow not generating the INI.

But in my tests, outside of an external source creating the INI file, disabling the checkbox will prevent SteamTinkerLaunch from creating one :-)

Happy gaming!

Thanks!

After giving it a try, I think that we're actually a bit early on this one--for once 😆

Getting the feature to work took a bit of work to setup, though, so feel free to correct me if anything sounds wrong to you.

First, I had to manually add the entry for the DLL into the SpecialK INI; otherwise, it wouldn't get loaded after the program restarted.

Also, IIRC, without manually entering the DLL, some games where ReShade reloaded during the game--such as with Warriors Orochi 3 Ultimate--created a ReShade INI. Naturally, SpecialK complained about an INI already being present in this case 😅

However, even after writing the DLL entry in, neither the GUI nor the keyboard shortcuts work--and this was true even with more well-behaved games like HoloCure.

From looking around on the ReShade Discord, it seems like Special K's not compatible yet; we might have to wait until ReShade 5.9.3 is released to really do any testing with what's here.

Still, better to be early, right? 😁

One weird thing I noticed with the Special K-created INIs, however...

[GENERAL]
EffectSearchPaths=.\,.\reshade-shaders\Shaders
TextureSearchPaths=.\,.\reshade-shaders\Textures
PresetPath=.\ReShadePreset.ini

[OVERLAY]
NoFontScaling=1

[STYLE]
EditorFont=ProggyClean.ttf
EditorFontSize=13
EditorStyleIndex=0
Font=ProggyClean.ttf
FontSize=13
StyleIndex=2

I'm not an expert, but I'm pretty sure .\,.\ isn't a real path, right? Even after changing it to .\, however, ReShade still didn't seem to work 😕

Still, I don't think it's anything on your end. Just have to wait a bit more...I guess? 😅

Thanks as always! 💜 🙏

@sonic2kk
Copy link
Owner

sonic2kk commented Jan 7, 2024

Thanks for all the testing! These do sound like a case of just being early, but I suppose that's to be expected when working with features from a nightly, it's compiled from the latest commit, and that oftentimes includes unfinished or sometimes even broken features - just in general, not saying SpecialK is broken or meaning any disrespect! (Oftentimes CI is used to try to ensure things work, but some features may still just not be ready yet).

First, I had to manually add the entry for the DLL into the SpecialK INI; otherwise, it wouldn't get loaded after the program restarted.

Hmm, since STL isn't creating the INI I don't think STL is doing anything wrong here. I'm also not sure it could automate this since the idea is for STL to entirely ignore any sort of INI creation.

Also, IIRC, without manually entering the DLL, some games where ReShade reloaded during the game--such as with Warriors Orochi 3 Ultimate--created a ReShade INI. Naturally, SpecialK complained about an INI already being present in this case 😅

Not with this specific game, but I did notice that an INI was created during testing with ReShade and SpecialK. I'm not sure how to solve this but hopefully this is something that will get taken care of on the SpecialK end in some way.

However, even after writing the DLL entry in, neither the GUI nor the keyboard shortcuts work--and this was true even with more well-behaved games like HoloCure.
From looking around on the ReShade Discord, it seems like Special K's not compatible yet; we might have to wait until ReShade 5.9.3 is released to really do any testing with what's here.

Hopefully then it's nothing on the side of Wine or STL, but if there are further developments and things are working on Windows but still broken on Linux, more investigation may be needed to see if STL is doing something wrong. I don't know the intricacies of what might be required but we've come this far so I'm hoping we can get this integration to work once there is more compatibility.

I'm not an expert, but I'm pretty sure .\,.\ isn't a real path, right? Even after changing it to .\, however, ReShade still didn't seem to work 😕

In terms of the path, as you pointed out I don't think ,. is a real path even on Windows, but I wonder if this is a comma separated path list? For example it could be read as .\ - comma - .\reshade-shaders\Shaders, if that makes sense (where .\ is short for the current working directory).

As for ReShade not working, perhaps (or rather, hopefully) this is just a case of being a bit early to the punch. I don't think there would be anything Wine-specific causing issues here, since ReShade itself is compatible and SpecialK also loads. If anything is going to be the culprit here, it will either be SteamTinkerLaunch needing to do something extra (currently not sure what that would be, if anything) or this SpecialK feature is still in-progress and has some ironing out (with potentially some of it being Wine-specific? Who knows 😄)


It doesn't hurt to be early, and I'm sure at some point the option to toggle creating the ReShade INI is going to be the exact option someone needs for an entirely different purpose, so in my eyes there is no harm done here. I'm hoping once a newer ReShade version is out and maybe even a newer SpecialK version, integration works more smoothly 😄

@CartoonFan
Copy link
Author

Just wanted to give an update that the recent ReShade integration's working pretty well! I haven't tried it with a lot of the problem games from before; but most times now it either automatically loads, or can be loaded without issue from the Special K GUI.

So...great work! I'll keep a lookout for anything over and above what we faced before; but for now, it's pretty smooth sailing.

Thanks again! 👍 💜 🙏

@sonic2kk
Copy link
Owner

sonic2kk commented Feb 8, 2024

That is awesome news! And thanks for all your collaboration and continued help, it's super appreciated :-)

@sonic2kk sonic2kk added the ReShade Issues related to using ReShade with SteamTinkerLaunch label Mar 20, 2024
@CartoonFan
Copy link
Author

Yet another small development with ReShade + Special K 😆

It seems like the latest Special K can now run without d3dcompiler_47 🎉

Granted, I haven't thoroughly tested it, but it seems to work pretty well with the games I've tested it with.

After disabling d3dcompiler_47 (and removing it from the directory) Special K sometimes shows this dialog box at the start of a game:

2024_04_02_00_58_04

Which makes me think that Special K now supports DXVK natively 😁

Since you ran into a crash with d3dcompiler_47 before (#894 (comment)), I thought you might want to know about the recent change; just in case it helps Special K compatibility on your end. If nothing else: hopefully it's a break from other, more difficult issues 😆

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment