sonic2kk / steamtinkerlaunch

Linux wrapper tool for use with the Steam client for custom launch options and 3rd party programs
GNU General Public License v3.0
2.15k stars 72 forks source link

[Feature Request]Automatic OptiScaler installation like SpecialK and ReShade #1188

Open BuyMyMojo opened 19 hours ago

BuyMyMojo commented 19 hours ago

System Information

Feature Description

OptiScaler support in the same fashion as SpecialK or ReShade.

OptiScaler is a pretty universal Upscaling replacer mod and in the pre-release versions it can also add Frame Generation. It is simple enough to install and explains to users the usual env variable needed in order to have it work on Linux.

I believe having this as a mod inside tinker launcher could be beneficial for Steam Deck users wanting extra performance and/or battery life in a much less manual way.

It has other supported names for it's .dll which can be found here

sonic2kk commented 18 hours ago

Support for Steam Deck is not planned to continue, Linux Gaming is more than and better outside of SteamOS. If this works outside of SteamOS, and the Linux support is first-class and is NOT specific or heavily geared towards SteamOS, I'm not opposed to having it in SteamTinkerLaunch. Again, so long as SteamOS is not the primary target, and Linux is supported more broadly than just that one distribution.

Please provide more details about how this should be installed if you are able. You mentioned an environmental variable, would it be enough to expect users to install this from i.e. their distribution repositories and just have a toggle on the Game Menu to enable this variable? Or is it in the vein of SpecialK and ReShade where it uses a DLL, and if so, where should this DLL go?

If this has first-class Linux Desktop support with no expectation of SteamOS being the "default", and is not a pain in the ass to manage installation of, this could be added. Though personally I'm not very interested in this right now, so someone else could add it. I'll add a "Help Wanted" label once I'm sure this is feasible to add.

BuyMyMojo commented 18 hours ago

SteamOS mention was all me, just where I thought this would also be useful. it doesn't mention SteamOS or the deck on the page at all, it is just a general mod that isn't Linux specific but has Linux support mentioned.

This mod adds a couple dll files into the executable path of the game; amd_fidelityfx_dx12.dll amd_fidelityfx_vk.dll libxess.dll nvngx.dll along with a config file nvngx.ini

nvngx.dll is the main mod file here and they currently recommend renaming it to another one of their supported names (Such as dxgi.dll or winmm.dll) and loading it that way for more support. when using it as dxgi you need the classic WINEDLLOVERRIDES=dxgi=n,b

sonic2kk commented 17 hours ago

SteamOS mention was all me, just where I thought this would also be useful. it doesn't mention SteamOS or the deck on the page at all, it is just a general mod that isn't Linux specific but has Linux support mentioned.

That sounds fine to implement then. Thanks for clarifying.


We could download these files and set the WINEDLLOVERRIDES. We already do this in some places so there is precedent. We can append it to the WINEDLLOVERRIDES environment variable like we do for I believe ReShade and SpecialK, so as not to interrupt any other DLL overrides set by the user. It also sounds like no prefix meddling is needed which is a relief.

As for the file naming, this is reminiscent of ReShade in particular, where you need to name the DLL to match the rendering backend.

With Wine, is there any case for using winmm.dll as the name, or any other name? If not, SteamTinkerLaunch could probably just name it as dxgi.dll by default when extracting it. We can control the extract path with the same ALTEXEPATH that we use for SpecialK and ReShade.

if dxgi.dll already exists, we could fall back to winmm.dll (not sure how we would handle both existing), since it sounds like both are equivalent.

If other DLL names could be used, we could default to dxgi.dll, or we could have it default to "auto".

I still have some questions, mainly pertaining to Linux usage specifically:

I think overall this is probably feasible to implement, these are just a couple of implementation details I'd like to iron out. I'd like to emphasise again that I don't have immediate plans to implement this personally (I have been very demotivated by the Linux gaming landscape and gaming and computing landscape as a whole, and have not had as much interest in the hobby for a while) the community is welcome to contribute. I think ironing out these details is good even if it probably won't be me (at least anytime soon) adding this because it will allow the discussion here to serve as a reference. When I write features having as much laid out in the issue as possible really helps, there were some very long-running ReShade improvement issues that were very useful in getting a big overhaul done a while back.


Note for whoever implements this: