emoose / DLSSTweaks

Tweak DLL for NVIDIA DLSS, force DLAA on DLSS-supported titles, tweak scaling ratios & DLSS 3.1 presets, override DLSS versions without overwriting game files.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Loading DLSS from single updatable location (no DLSSTweaks required)

emoose opened this issue · comments

Reposting from my comment on guru3d:

Looks like DLSS can load newer ver automatically if you create a 198400 folder inside C:\ProgramData\NVIDIA\NGX\models\dlss\versions, create a files folder inside there, then copy 3.7.0 nvngx_dlss.dll into it and rename to 160_E658703.bin.
(so you should have it at C:\ProgramData\NVIDIA\NGX\models\dlss\versions\198400\files\160_E658703.bin)

Finally open the C:\ProgramData\NVIDIA\NGX\models\nvngx_config.txt file in text editor and add these lines to the [dlss] section:

app_E658703 = 3.7.0
app_E658703_forced = 3.7.0

That seems to let HFW load in 3.7.0 instead of the 3.5.10 in game folder, I'm not sure if this only works for games that use the generic appID though, if the DLSS overlay shows a different id than E658703 you might need to change the filename and INI names.

(I think nvngx is also checking for this generic appID specifically even when game is providing appID though, so maybe it'll just work - might be a nicer way than needing to swap the files for every game manually)

E: seems to work for dlssg too, the config txt also mentions dlssd so probably works for RR as well, but I don't have any RR games installed atm to check with.

A powershell script/module to handle this for you can be found here: https://gist.github.com/emoose/11271bbb3b42fb3b1b0e1c83eef47c05
With that setup you can just write UpdateDLSS into powershell whenever a new DLSS version drops and point it to your downloaded nvngx_dlss.dll, and it'll handle copying/updating INI for you.

Maybe could be something worth including into ConfigTool eventually too, hmm...

(or if any other tools want to implement it feel free)

Tried with Fortnite, used it's appID, but it didn't work. DLSS indicator was still showing it runs game's 2.2.6. I wonder if there could be a way to force every app to be recognized as generic.

Was that with copying/editing the files manually or did you use the PS script? The script was bugged till ~5 hours ago (probably wasn't a good idea to update it right before going to bed lol...), should be fixed now though.

From the code in nvngx it looks like copying it to E658703 should let it load even for non-generic-appid games, as long as the version for E658703 is newer than the one included with the game, haven't tried checking any non-generic games to verify that yet though.

Manually.

Anyway, I tried it again with the generic appid. Tried Cyberpunk with 2.5.1 in game directory and it didn't work. It was running on 2.5.1 and DLAA was somehow broken by this. The textures weren't loading properly and DLSS indicator wasn't even showing. I guess it tried to connect with the file in NVIDIA folder, but it wasn't working properly,

Maybe it only works for later versions of DLSS, but obviously not with 2.x.x. A pitty.

This is phenomenal!

Now to only figure out how to do this for dlssg and dlssd and we're golden...

Seems to at least work for dlssg if you substitute dlss -> dlssg in the folder/INI names (the PS script should handle that for you too)
I'd guess dlssd will work as well since the INI this changes does mention it, but haven't got any dlssd games installed to test that with atm.

Reposting from my comment on guru3d:

Looks like DLSS can load newer ver automatically if you create a 198400 folder inside C:\ProgramData\NVIDIA\NGX\models\dlss\versions, create a files folder inside there, then copy 3.7.0 nvngx_dlss.dll into it and rename to 160_E658703.bin.
(so you should have it at C:\ProgramData\NVIDIA\NGX\models\dlss\versions\198400\files\160_E658703.bin)
Finally open the C:\ProgramData\NVIDIA\NGX\models\nvngx_config.txt file in text editor and add these lines to the [dlss] section:
app_E658703 = 3.7.0
app_E658703_forced = 3.7.0
That seems to let HFW load in 3.7.0 instead of the 3.5.10 in game folder, I'm not sure if this only works for games that use the generic appID though, if the DLSS overlay shows a different id than E658703 you might need to change the filename and INI names.
(I think nvngx is also checking for this generic appID specifically even when game is providing appID though, so maybe it'll just work - might be a nicer way than needing to swap the files for every game manually)
E: seems to work for dlssg too, the config txt also mentions dlssd so probably works for RR as well, but I don't have any RR games installed atm to check with.

A powershell script/module to handle this for you can be found here: https://gist.github.com/emoose/11271bbb3b42fb3b1b0e1c83eef47c05 With that setup you can just write UpdateDLSS into powershell whenever a new DLSS version drops and point it to your downloaded nvngx_dlss.dll, and it'll handle copying/updating INI for you.

Maybe could be something worth including into ConfigTool eventually too, hmm...

(or if any other tools want to implement it feel free)

can I ask you something. what does number 198400 refer to?

That's the version number converted from hex to decimal

eg. DLSS 3.7.0 would be 0x030700 in hexadecimal, if you put that into a hex -> dec converter like https://www.rapidtables.com/convert/number/hex-to-decimal.html it'll give 198400

If a DLSS 3.8 releases then the hex would be 0x030800, so the decimal/folder name would be 198656

(something like 3.1.11 would be 0x03010B though, since 11 is B in hex)

The powershell script I posted should be able to find the version number and get the right decimal for you btw

That's the version number converted from hex to decimal

eg. DLSS 3.7.0 would be 0x030700 in hexadecimal, if you put that into a hex -> dec converter like https://www.rapidtables.com/convert/number/hex-to-decimal.html it'll give 198400

If a DLSS 3.8 releases then the hex would be 0x030800, so the decimal/folder name would be 198656

(something like 3.1.11 would be 0x03010B though, since 11 is B in hex)

The powershell script I posted should be able to find the version number and get the right decimal for you btw

thanks for your replay <3

Hey, I tested the powershell script and it appears that it doesn't work on fortnite. I know how to use dlsstweaks as i use it on minecraft, but I am obviously weary of doing it in fortnite as I don't want to end up with a ban. do you know of the safest way to use the latest version of dlss on fortnite?

Furzide

not working with 2.x versions you need version 3.0++.
Im still trying figure out why this happening the log file show that the dlss snippet feature just ignore the bin file and load the game DLL file directly when the battle eye anti cheat used I manage to swap DLL file to any version I want, if I swap it for example to version 3.5 the method will work and it will be updated automatically to version 3.7 but any 2.0 version will not work, I think its because the build of 2.x version is different from 3.x version (3.x versions have a presets but 2.x not)

Furzide

not working with 2.x versions you need version 3.0++. Im still trying figure out why this happening the log file show that the dlss snippet feature just ignore the bin file and load the game DLL file directly when the battle eye anti cheat used I manage to swap DLL file to any version I want, if I swap it for example to version 3.5 the method will work and it will be updated automatically to version 3.7 but any 2.0 version will not work, I think its because the build of 2.x version is different from 3.x version (3.x versions have a presets but 2.x not)

mate I know that dlss 3 is required that's what I'm trying to use on fortnite, the issue is that I don't know what sort of anticheat issues are gonna arise from replacing the dlss dll with 3.7.0, or how to prevent them from happening.

Furzide

not working with 2.x versions you need version 3.0++. Im still trying figure out why this happening the log file show that the dlss snippet feature just ignore the bin file and load the game DLL file directly when the battle eye anti cheat used I manage to swap DLL file to any version I want, if I swap it for example to version 3.5 the method will work and it will be updated automatically to version 3.7 but any 2.0 version will not work, I think its because the build of 2.x version is different from 3.x version (3.x versions have a presets but 2.x not)

mate I know that dlss 3 is required that's what I'm trying to use on fortnite, the issue is that I don't know what sort of anticheat issues are gonna arise from replacing the dlss dll with 3.7.0, or how to prevent them from happening.

@Furzide you understand what I mean ? the problem isn't the anti-cheat, the problem is Fortnite have dlss version 2.2.6 and that not swappable

Furzide

not working with 2.x versions you need version 3.0++. Im still trying figure out why this happening the log file show that the dlss snippet feature just ignore the bin file and load the game DLL file directly when the battle eye anti cheat used I manage to swap DLL file to any version I want, if I swap it for example to version 3.5 the method will work and it will be updated automatically to version 3.7 but any 2.0 version will not work, I think its because the build of 2.x version is different from 3.x version (3.x versions have a presets but 2.x not)

mate I know that dlss 3 is required that's what I'm trying to use on fortnite, the issue is that I don't know what sort of anticheat issues are gonna arise from replacing the dlss dll with 3.7.0, or how to prevent them from happening.

@Furzide you understand what I mean ? the problem isn't the anti-cheat, the problem is Fortnite have dlss version 2.2.6 and that not swappable

I've seen people swap the dlss dll in fortnite. The issue is that I can't seem to recreate it. proof is in this youtube video here:
https://youtu.be/ZRubyJJP16s?si=938d3CjIaa9di58s

Furzide

not working with 2.x versions you need version 3.0++. Im still trying figure out why this happening the log file show that the dlss snippet feature just ignore the bin file and load the game DLL file directly when the battle eye anti cheat used I manage to swap DLL file to any version I want, if I swap it for example to version 3.5 the method will work and it will be updated automatically to version 3.7 but any 2.0 version will not work, I think its because the build of 2.x version is different from 3.x version (3.x versions have a presets but 2.x not)

mate I know that dlss 3 is required that's what I'm trying to use on fortnite, the issue is that I don't know what sort of anticheat issues are gonna arise from replacing the dlss dll with 3.7.0, or how to prevent them from happening.

@Furzide you understand what I mean ? the problem isn't the anti-cheat, the problem is Fortnite have dlss version 2.2.6 and that not swappable

I've seen people swap the dlss dll in fortnite. The issue is that I can't seem to recreate it. proof is in this youtube video here: https://youtu.be/ZRubyJJP16s?si=938d3CjIaa9di58s

the dlss will only be swappable with the battle Eye anti cheat but with easy anti cheat you cant (even with battle eye anti cheat this method will not work except if you swap the dlss 2.2.6 with 3.0 version in game file

Furzide

not working with 2.x versions you need version 3.0++. Im still trying figure out why this happening the log file show that the dlss snippet feature just ignore the bin file and load the game DLL file directly when the battle eye anti cheat used I manage to swap DLL file to any version I want, if I swap it for example to version 3.5 the method will work and it will be updated automatically to version 3.7 but any 2.0 version will not work, I think its because the build of 2.x version is different from 3.x version (3.x versions have a presets but 2.x not)

mate I know that dlss 3 is required that's what I'm trying to use on fortnite, the issue is that I don't know what sort of anticheat issues are gonna arise from replacing the dlss dll with 3.7.0, or how to prevent them from happening.

@Furzide you understand what I mean ? the problem isn't the anti-cheat, the problem is Fortnite have dlss version 2.2.6 and that not swappable

I've seen people swap the dlss dll in fortnite. The issue is that I can't seem to recreate it. proof is in this youtube video here: https://youtu.be/ZRubyJJP16s?si=938d3CjIaa9di58s

the dlss will only be swappable with the battle Eye anti cheat but with easy anti cheat you cant (even with battle eye anti cheat this method will not work except if you swap the dlss 2.2.6 with 3.0 version in game file

thats what i thought aswell, I assume that launching the game through "FortniteClient-Win64-Shipping_BE.exe" will launch the game with battleye correct?

Furzide

not working with 2.x versions you need version 3.0++. Im still trying figure out why this happening the log file show that the dlss snippet feature just ignore the bin file and load the game DLL file directly when the battle eye anti cheat used I manage to swap DLL file to any version I want, if I swap it for example to version 3.5 the method will work and it will be updated automatically to version 3.7 but any 2.0 version will not work, I think its because the build of 2.x version is different from 3.x version (3.x versions have a presets but 2.x not)

mate I know that dlss 3 is required that's what I'm trying to use on fortnite, the issue is that I don't know what sort of anticheat issues are gonna arise from replacing the dlss dll with 3.7.0, or how to prevent them from happening.

@Furzide you understand what I mean ? the problem isn't the anti-cheat, the problem is Fortnite have dlss version 2.2.6 and that not swappable

I've seen people swap the dlss dll in fortnite. The issue is that I can't seem to recreate it. proof is in this youtube video here: https://youtu.be/ZRubyJJP16s?si=938d3CjIaa9di58s

the dlss will only be swappable with the battle Eye anti cheat but with easy anti cheat you cant (even with battle eye anti cheat this method will not work except if you swap the dlss 2.2.6 with 3.0 version in game file

thats what i thought aswell, I assume that launching the game through "FortniteClient-Win64-Shipping_BE.exe" will launch the game with battleye correct?

patched

Furzide

not working with 2.x versions you need version 3.0++. Im still trying figure out why this happening the log file show that the dlss snippet feature just ignore the bin file and load the game DLL file directly when the battle eye anti cheat used I manage to swap DLL file to any version I want, if I swap it for example to version 3.5 the method will work and it will be updated automatically to version 3.7 but any 2.0 version will not work, I think its because the build of 2.x version is different from 3.x version (3.x versions have a presets but 2.x not)

mate I know that dlss 3 is required that's what I'm trying to use on fortnite, the issue is that I don't know what sort of anticheat issues are gonna arise from replacing the dlss dll with 3.7.0, or how to prevent them from happening.

@Furzide you understand what I mean ? the problem isn't the anti-cheat, the problem is Fortnite have dlss version 2.2.6 and that not swappable

I've seen people swap the dlss dll in fortnite. The issue is that I can't seem to recreate it. proof is in this youtube video here: https://youtu.be/ZRubyJJP16s?si=938d3CjIaa9di58s

the dlss will only be swappable with the battle Eye anti cheat but with easy anti cheat you cant (even with battle eye anti cheat this method will not work except if you swap the dlss 2.2.6 with 3.0 version in game file

thats what i thought aswell, I assume that launching the game through "FortniteClient-Win64-Shipping_BE.exe" will launch the game with battleye correct?

I tried to modify the dll file but if i change a single digit in it the easy anti cheat will detect it

Furzide

not working with 2.x versions you need version 3.0++. Im still trying figure out why this happening the log file show that the dlss snippet feature just ignore the bin file and load the game DLL file directly when the battle eye anti cheat used I manage to swap DLL file to any version I want, if I swap it for example to version 3.5 the method will work and it will be updated automatically to version 3.7 but any 2.0 version will not work, I think its because the build of 2.x version is different from 3.x version (3.x versions have a presets but 2.x not)

mate I know that dlss 3 is required that's what I'm trying to use on fortnite, the issue is that I don't know what sort of anticheat issues are gonna arise from replacing the dlss dll with 3.7.0, or how to prevent them from happening.

@Furzide you understand what I mean ? the problem isn't the anti-cheat, the problem is Fortnite have dlss version 2.2.6 and that not swappable

I've seen people swap the dlss dll in fortnite. The issue is that I can't seem to recreate it. proof is in this youtube video here: https://youtu.be/ZRubyJJP16s?si=938d3CjIaa9di58s

the dlss will only be swappable with the battle Eye anti cheat but with easy anti cheat you cant (even with battle eye anti cheat this method will not work except if you swap the dlss 2.2.6 with 3.0 version in game file

thats what i thought aswell, I assume that launching the game through "FortniteClient-Win64-Shipping_BE.exe" will launch the game with battleye correct?

I tried to modify the dll file but if i change a single digit in it the easy anti cheat will detect it

ok, so basically there is not a single current working method to make fortnite use a different dlss version, and will require waiting for epic to spend another few years at minimum to update dlss on their end.

Furzide

not working with 2.x versions you need version 3.0++. Im still trying figure out why this happening the log file show that the dlss snippet feature just ignore the bin file and load the game DLL file directly when the battle eye anti cheat used I manage to swap DLL file to any version I want, if I swap it for example to version 3.5 the method will work and it will be updated automatically to version 3.7 but any 2.0 version will not work, I think its because the build of 2.x version is different from 3.x version (3.x versions have a presets but 2.x not)

mate I know that dlss 3 is required that's what I'm trying to use on fortnite, the issue is that I don't know what sort of anticheat issues are gonna arise from replacing the dlss dll with 3.7.0, or how to prevent them from happening.

@Furzide you understand what I mean ? the problem isn't the anti-cheat, the problem is Fortnite have dlss version 2.2.6 and that not swappable

I've seen people swap the dlss dll in fortnite. The issue is that I can't seem to recreate it. proof is in this youtube video here: https://youtu.be/ZRubyJJP16s?si=938d3CjIaa9di58s

the dlss will only be swappable with the battle Eye anti cheat but with easy anti cheat you cant (even with battle eye anti cheat this method will not work except if you swap the dlss 2.2.6 with 3.0 version in game file

thats what i thought aswell, I assume that launching the game through "FortniteClient-Win64-Shipping_BE.exe" will launch the game with battleye correct?

I tried to modify the dll file but if i change a single digit in it the easy anti cheat will detect it

ok, so basically there is not a single current working method to make fortnite use a different dlss version, and will require waiting for epic to spend another few years at minimum to update dlss on their end.

yup, you can only do it when the battle eye be used

Tried with Fortnite, used it's appID, but it didn't work. DLSS indicator was still showing it runs game's 2.2.6. I wonder if there could be a way to force every app to be recognized as generic.

the problem not the appID its actually the version of DLL file if the game DLL file version is 2.x this method will not work with it. Im actually test it with fortnite. when battle eye running you can swap the DLSS DLL file and iam already swap it with version 3.5 and launching the game its show 3.7 but when i leave the old version 2.2.6 it will not swap. Its not the anti cheat or appID cause Its actually the DLL version (you cant swap 2.x version with 3.x version)

Tried with Fortnite, used it's appID, but it didn't work. DLSS indicator was still showing it runs game's 2.2.6. I wonder if there could be a way to force every app to be recognized as generic.

the problem not the appID its actually the version of DLL file if the game DLL file version is 2.x this method will not work with it. Im actually test it with fortnite. when battle eye running you can swap the DLSS DLL file and iam already swap it with version 3.5 and launching the game its show 3.7 but when i leave the old version 2.2.6 it will not swap. Its not the anti cheat or appID cause Its actually the DLL version (you cant swap 2.x version with 3.x version)

another question, am i correct in saying that it is random whether the game will use battleye or eac, I'm hoping that it isn't 100% random as maybe there are ways to make the game more likely to use battleye than eac

I simply replaced Fortnite's 2.2.6 with 3.7.0 and made the setup through Profile Inspector with DLSS settings plugin. Works as it should and Anti Cheat does not have problem with it. Only thing that is annoying that Epic Games Launcher replaces it back with every small update, but that is happening with every game on Epic.

The method discussed on this thread did not work for me with any game, the Profile Inspector works with pretty much every game that has it's own appID, which are almost all.

Tried with Fortnite, used it's appID, but it didn't work. DLSS indicator was still showing it runs game's 2.2.6. I wonder if there could be a way to force every app to be recognized as generic.

the problem not the appID its actually the version of DLL file if the game DLL file version is 2.x this method will not work with it. Im actually test it with fortnite. when battle eye running you can swap the DLSS DLL file and iam already swap it with version 3.5 and launching the game its show 3.7 but when i leave the old version 2.2.6 it will not swap. Its not the anti cheat or appID cause Its actually the DLL version (you cant swap 2.x version with 3.x version)

another question, am i correct in saying that it is random whether the game will use battleye or eac, I'm hoping that it isn't 100% random as maybe there are ways to make the game more likely to use battleye than eac

anti-cheats replace day by day the

Wonder if using a folder name for v2.x but with a v3.x DLL inside might let v2 load updated DLLs for us, hopefully I can try with a DLSS2 game soon, but if anyone else wants to test you can probably copy the v3 DLL as C:\ProgramData\NVIDIA\NGX\models\dlss\versions\132608\files\160_E658703.bin and then add this to C:\ProgramData\NVIDIA\NGX\models\nvngx_config.txt [dlss] section:

app_E658703 = 2.6.0
app_E658703_forced = 2.6.0

Wonder if using a folder name for v2.x but with a v3.x DLL inside might let v2 load updated DLLs for us, hopefully I can try with a DLSS2 game soon, but if anyone else wants to test you can probably copy the v3 DLL as C:\ProgramData\NVIDIA\NGX\models\dlss\versions\132608\files\160_E658703.bin and then add this to C:\ProgramData\NVIDIA\NGX\models\nvngx_config.txt [dlss] section:

app_E658703 = 2.6.0
app_E658703_forced = 2.6.0

I've already tried this trick. When I asked you what the number 198400 refers to? I changed it to 2.5.1 and tried replacing 2.2.6 with 2.5.1 but it didn't work. The problem is when I check the Fortnite log file, it completely ignores the verification step and loads the in-game DLL, but when Battle Eye Anti Cheat is running and replace the in-game DLL with any 3.x version, the method works as expected. unfortunately This method works with 3.x DLLs only.

Wonder if using a folder name for v2.x but with a v3.x DLL inside might let v2 load updated DLLs for us, hopefully I can try with a DLSS2 game soon, but if anyone else wants to test you can probably copy the v3 DLL as C:\ProgramData\NVIDIA\NGX\models\dlss\versions\132608\files\160_E658703.bin and then add this to C:\ProgramData\NVIDIA\NGX\models\nvngx_config.txt [dlss] section:

app_E658703 = 2.6.0
app_E658703_forced = 2.6.0

Its show "[2024.05.18-14.19.54:500][684]LogDLSSNGX: [Core]: [2024-05-18 17:19:54] [NGXSecureLoadFeature:984] app B9393FC feature dlss snippet: D:\Fortnite\FortniteGame\Binaries\ThirdParty\NVIDIA\NGX\Win64/nvngx_dlss.dll version: 2.2.6"

but when replace the in-game dll with 3.x DLL show that
"[2024.05.18-14.19.54:500][684]LogDLSSNGX: [Core]: [2024-05-18 17:19:54] [NGXSecureLoadFeature:984] app B9393FC feature dlss snippet: C:\ProgramData\NVIDIA\NGX\models\dlss\versions\132608\files/160_E658703.bin version: 3.7.0

Wonder if using a folder name for v2.x but with a v3.x DLL inside might let v2 load updated DLLs for us, hopefully I can try with a DLSS2 game soon, but if anyone else wants to test you can probably copy the v3 DLL as C:\ProgramData\NVIDIA\NGX\models\dlss\versions\132608\files\160_E658703.bin and then add this to C:\ProgramData\NVIDIA\NGX\models\nvngx_config.txt [dlss] section:

app_E658703 = 2.6.0
app_E658703_forced = 2.6.0

And one last thing if i'm not bothering you. what is "160 _" mean before the generic appid

Ah too bad, it's strange that it's not loading it really, afaik it's the nvngx.dll file which is part of the NV driver that handles this update stuff, not really sure why v2 makes that act different.

160 is the gpu arch ID iirc, there's some values listed here: https://github.com/sawickiap/D3d12info/blob/6b05ca21efbac658fd64b91bf54234ef349abf4d/Src/NvApiData.cpp#L333

AFAIK nvngx ignores what your gpu is and always uses 160, maybe at one time was meant for giving different DLSS files to different GPU archs, though I did see 140 on one bin file, maybe could be worth trying that with v2?

Ah too bad, it's strange that it's not loading it really, afaik it's the nvngx.dll file which is part of the NV driver that handles this update stuff, not really sure why v2 makes that act different.

160 is the gpu arch ID iirc, there's some values listed here: https://github.com/sawickiap/D3d12info/blob/6b05ca21efbac658fd64b91bf54234ef349abf4d/Src/NvApiData.cpp#L333

AFAIK nvngx ignores what your gpu is and always uses 160, maybe at one time was meant for giving different DLSS files to different GPU archs, though I did see 140 on one bin file, maybe could be worth trying that with v2?

I will give it a try

Ah too bad, it's strange that it's not loading it really, afaik it's the nvngx.dll file which is part of the NV driver that handles this update stuff, not really sure why v2 makes that act different.

160 is the gpu arch ID iirc, there's some values listed here: https://github.com/sawickiap/D3d12info/blob/6b05ca21efbac658fd64b91bf54234ef349abf4d/Src/NvApiData.cpp#L333

AFAIK nvngx ignores what your gpu is and always uses 160, maybe at one time was meant for giving different DLSS files to different GPU archs, though I did see 140 on one bin file, maybe could be worth trying that with v2?

Nah nothing changed , tried 140 and 172 (my GPU arch) nothing change. I feel that happened because nvngx_server_config file not implemented to update the old version or something like that