beeradmoore / dlss-swapper

GNU General Public License v3.0
1.72k stars 62 forks source link

[Feature request] Filter only DLSS supported games #12

Closed someONEgood closed 2 years ago

someONEgood commented 3 years ago

Is your feature request related to a problem? Please describe. Not specifically a problem, just a design choice/preference. Really appreciate that you took the time to create this.

Describe the solution you'd like The option to filter out non-DLSS supported games, rather than display the entire Steam Library. Preferably this would just scan the system for the relevant .exe's _(or whatever method of DLSS detection you're using, probably nvngxdlss.dll?) of supported games with no need for specific launcher support. (Steam, Epic, Rockstar Launcher, GOG, etc) If new titles are released that support DLSS, the community could add the relevant .exe to search for via github.

Describe alternatives you've considered Alternatively, scan titles at startup for the "DLSS was not detected in ." prompt, and then hide those titles accordingly. Folk could opt-in to this method or not at first startup, or via additional prompt if already installed.

Additional context Just a side note, perhaps add to the "Please note" section of the Readme:

This tool does not allow DLSS 1.0 supported games to work with DLSS 2.x+ DLL's. These games need 2.0 implementation by their respective developers and updating their .dll may result in your game not working properly. These include titles such as Battlefield V, Shadow of the Tomb Raider, etc.

See this list for compatible titles: https://en.wikipedia.org/wiki/List_of_games_with_support_for_high-fidelity_image_upscaling

Again thank you for this great utility.

beeradmoore commented 3 years ago

I can see two enhancements coming out of this which I think could solve all your problems.

  1. In the games list view, add a filter button. Within that filter add a checkbox for "Hide games without DLSS", and as a bonus a second bunch of check boxes so users can have the tool only scan Steam and not Epic Game Store (maybe they only use Unreal Engine from Epic and not nay games so they don't care for it scanning it).

  2. If a game has DLSS 1.X, don't show any 2.X dlls, likewise if a game has 2.X, don't show any 1.X dlls as an option. That way we can keep those seperate.

What do you think if we did that?

someONEgood commented 3 years ago

Those sound like pretty solid implementations. Any additional form of user-end customization would be great!

  1. In the games list view, add a filter button. Within that filter add a checkbox for "Hide games without DLSS", and as a bonus a second bunch of check boxes so users can have the tool only scan Steam and not Epic Game Store (maybe they only use Unreal Engine from Epic and not nay games so they don't care for it scanning it).

100% on the filter button. Would be a fantastic addition. And while I would still appreciate a scan-all option that isn't limited specifically to launchers for game installs, an option to filter in/out all available storefront install locations would be a good alternative.

  1. If a game has DLSS 1.X, don't show any 2.X dlls, likewise if a game has 2.X, don't show any 1.X dlls as an option. That way we can keep those seperate.

Another very solid idea. While my experience with 1.0 implementations was that they were barely even worth turning on (BFV, Monster Hunter, FFXV), it makes sense to still include that functionality. I never even thought to try updating their respective 1.x versions now that I think about it. Gonna try that today with your handy tool! Looking forward to seeing what you come up with!

-someONEgood

beeradmoore commented 3 years ago

On the last point, it was requested elsewhere to allow people to vote on specific DLSS versions for games. So if people say 2.2.99 works in Cyberpunk, that way others don't have to play swap the dll until they find one that works. They can just go with the community recommended version. But that requires a bunch of extra backend services and whatnot.

revanmj commented 3 years ago

Wouldn't it be possible to use GitHub issues for that?

Have game as an issue and versions as comments, than take number of thumbs up as confirmation that specific version works well.

Though I don't know if all of this is available via their API :)

beeradmoore commented 3 years ago

It's possible, but that relies on people having a Github account, going to repo, etc, so the numbers would be low.

An in-app solution would be nice so then you can see it first hand. A good way to get feedback is after a game is quit we can go "Did DLSS v2.2.99 work well for Watch Dogs Legion?" with a 👍 and 👎. But a setup like could be complicated to setup and somewhat intrusive to the user.

To add an extra layer of annoyance on top of this you need to also track the game version. Because Watch Dogs Legion 1.1 may behave badly with DLSS v2.2.99, but then Watch Dogs Legion 1.2 may work great with DLSS v2.299.

And then an EXTRA layer on top of that because people on the internet are annoying, is how do you prevent malicious users "dlss review bombing" a game right down. We'd possibly a login system, but then also not allow that to be automated by external bots.

As much as I'd like to go all-in on this, it'd essentially be a lot of devtime, additional server costs, etc.

beeradmoore commented 3 years ago

And the other thing about user feedback is that it's subjective. Does 👎 mean the game crashes or does it mean the annoying ghosting issues still exist in Metro Exodus Enhanced Edition. Does 👍 mean the ghosting is fixed, or that it's now bearable.

Like I still have not played Metro Exodus Enhanced Edition because the ghosting is still annoying to me, to others they may find it now acceptable.

CuddleBear92 commented 3 years ago

Couldnt the client be pre-filled with SteamDB info for example out of the box? https://steamdb.info/tech/SDK/NVIDIA_DLSS/

Already lists all the titles and ID's on Steam with the titles in question. sadly no mention of what version anything is sadly. But if you login to SteamDB then you could easily pull the hash value of the dlss dll files and map it all that way. Makes sense to work out a base that way atleast.

beeradmoore commented 3 years ago

Main problem with that is SteamDB is only useful for Steam games. It's easier for the client to know that a user has Steam, Origin, and Epic Game Store installed, and then detect their games directory as: C:\Steam\games\ E:\Origin\games_dir\ F:\EpicGameStore\the_games\ and then it can search those directories for the DLSS dll which is always named nvngx_dlss.dll (at least as far as I know its always named that).

The tricky bit is knowing, how does Epic Game Store client installed on someones PC know where it itself stored games. I've done some research on EGS that you can read here. I have not looked into the other platforms yet.

As for that link, that is awesome to know it exists. Thanks for sharing! While it may not be directly useful to DLSS Swapper, it does give me a giant list of games that support DLSS, a bunch of those games potentially exist on other platforms which gives me more test data to inspect those game libraries with.

CuddleBear92 commented 3 years ago

While SteamDB doesn't directly help EGS and Origin and the others. In-directly it can as most titles drop on Steam anyway. You could automate tracking of updates for the titles already logged to have DLSS and allow it to check and compare the dll hash value on each update to spot any changes. this way you can easily see what titles gets what updates or even custom versions. having it all be hash based in its logging and mapping makes sense in the end.

And all the mapped data could be re-used for any other client or usecase.

Another way to do it would be to just have the mapped hashes in the client and let each client do a SHA1 calculation of each dll file it finds in the supported titles. If its not a known hash then it could report it to you for pushing an update to the rest of the clients. But maybe i am thinking about this in a larger manner.

Just having the hash values dictate what version it is and everything else makes the most sense compared checking and comparing the version of the file itself.

Also to note, that install registries can fail and can mess up for sure and can be incorrect or missing.

ZeMilkmann commented 3 years ago

Regarding the rating system: You could simply have users agree to send back which versions they use for which game (if changed from default) as a very rudimentary "XX% of people who changed DLSS on game Y are using version Z".

This makes review bombing much harder because it's much mess likely that someone will run 100 real or virtual machines just to mess with the results of a non-profit without being able to gain anything.

You could also add fingerprinting like anti-cheat tools do, but that may be a bit of a nightmare regarding GDPR

beeradmoore commented 3 years ago

Doesn't take VMs to ruin the system, if it's just a web request you can add a loop in there that goes over 100 times.

But what if it sends machine ID? Well then in each request I (as the bad person) would just generate a new ID.

I think it'd have to be handled on the server side trying to fingerprint legitimate users, and then later analysing the data and realising "woah all these results are fake".

Not out of the world of impossible to do, also it defends against something that is not likely to happen. So risk/reward is all there.

beeradmoore commented 3 years ago

Also keep in mind, it's a free tool. As soon as there is an online component it starts costing me money. Sponsorship/donations is great and all, but when it can't be a full time job to be ready and quickly fix things when they break people are going to be mad that they used money on something that doesn't work.

beeradmoore commented 3 years ago

Current progress of the filter.

Screenshot 2021-09-06 091404

beeradmoore commented 2 years ago

This has since been released.