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.
License: MIT License
C 0.20%C++ 46.41%CMake 4.11%Batchfile 0.05%C# 49.22%dlssgamenvidia
dlsstweaks's Introduction
Shwmae!
Ydy fy enw i emoose, welcome to my page!
Recent things I've helped work on:
DLSSTweaks - allows customizing Nvidia DLSS via INI and a config tool.
OutRun2006Tweaks - minor fixes & tweaks for OutRun 2006: Coast 2 Coast.
DS2FrameUnlimiter - fixes Dark Souls 2 SotFS to run above 60FPS without speedup.
NvTrueHDR - tool to enable RTX HDR in non-HDR games.
MPC-VR RTX - adds Nvidia VideoSuperResolution & VideoHDR support to MPC-HC/MPC-BE video renderer.
PrototypeFix - fixes for the games Prototype & Prototype 2 to help them work on modern machines.
MGSHDFix - improvements for the MGS Master Collection PC release.
re4_tweaks - brings many improvements to the RE4 UHD Steam release, included in RE4 HD Project.
Xbox / Xbox 360
xbox-reversing - templates for 010 Editor & parsers for pulling apart various Xbox360 formats such as XEX/STFS/GPD
xvdtool - for manipulating the XVD images used by Xbox One
Xb2XInput - adds support for Xbox OG controllers to Windows
xbox-winfsp - for mounting Xbox/Xbox360-specific file systems natively under Windows
idaxex/xex1tool - disassemble X360 XEX executables from almost any point in time (pre-beta Xenon executables onward!)
stfschk - for validating the integrity of Xbox360 STFS packages
ExCrypt - for interoperability with X360's XeCrypt cryptography suite
XbRecUnpack - for fully unpacking Xbox/Xbox360 recoveries/installers
dolphin.mp4
Game Modding
Also helped take some games apart to try making them moddable too:
MBINCompiler - a tool for (de)serializing No Mans Sky data files
DOOMExtract - for extracting/repacking DOOM 2016 resources
DoomLegacyMod - unlocks nearly all DOOM 2016 console-commands/variables, and even reimplements a few (noclip, infiniteHealth, noTarget...)
ElDewrito - a client modification/derestrictor for Halo Online.
Improved Lighting Shaders - for Fallout New Vegas, allows extending the per-cell light-limit and helps eliminate lighting issues
Automata-LodMod - helps improve graphical quality in NieR Automata & patches in various improvements
re4_tweaks - a wrapper DLL that improves the PC RE4 UHD port, bringing fixes & improvements that have been requested for years!
Finally, some of my UE4 mods/tools:
DQXIHook - mod for Dragon Quest XI that unlocks the UE4 dev console & allows loose-file loading.
DQXIS-SDK - mod for Dragon Quest XI S that allows easier modding through loose-file loading & enabling the dev-console, along with some code/resolution fixes & added game features.
DQXIAsset - a tool for (de)serializing / unpacking / decompiling the UE4 DataTables used by DQXIS.
Arise-SDK - a mod for Tales of Arise that can improve graphics & help modders via dev-console access/loose-file loading.
FFVIIHook - mod for FFVII Remake that unlocks dev-console & allows much easier INI modding.
E: a test build with this implemented can be found below: #2 (comment)
ForceDLAA works by overriding the resolution DLSS tells the game to use at each quality level - it might be nice if the DLL could also let the user specify the resolution/ratio for each level too.
Not completely sure whether DLSS actually works at any ratio or not though, might have some limits in place that only let it work at the normal resolutions for each quality level, will need to look into it some more.
DLSS Super Resolution for Windows games works on Linux through translation layers. And DLSS Tweaks works too. But in some cases some extra work is required to get DLSS Tweaks working. And I wanted to help provide documentation on how to do this.
I just haven't done a pull request before, and I'm not even sure where to put the Linux documentation. So I thought I could maybe share the information here and maybe @emoose or someone else could add it to the documentation?
I should start by explaining how Windows games on Linux works, why DLSS Tweaks sometimes doesn't work, and some terminology so if you're not familiar with Windows games on Linux, you can still hopefully understand the documentation.
On Linux, there are a set of translation layers. The most common ones being WINE, DXVK, and VKD3D. WINE handles all the CPU side translations that need to occur to get Windows builtin functions working on Linux. DXVK, VKD3D do the graphics API translations.
This combination of translation layers and other tools are can be bundled together by other people for you to use (E.G. Proton provided by Valve) or you can make your own combinations. And since most/all these translations layers are open source, modifications can be made by different people/companies to suit their needs. And this adds some complexity to the instructions on how to get DLSS Tweaks working on Linux, hence why there are multiple sections explaining how to get DLSS Tweaks working.
Now, why doesn't DLSS Tweaks work out of the box on Linux? Because WINE ignores some dll files unless they are explicitly called by an application. And some of those dll files are the names that DLSS Tweaks dll needs to be renamed too to work. So we need to open winecfg (A WINE configuration tool) and tell WINE to try loading the DLSS Tweaks dll instead of ignoring it. And this fixes the issue.
Terminology that may be useful
"Proton" is the name given to a custom build of WINE + DXVK + VKD3D + other stuff made by Valve for use in the "Steam Play" program/initiative. It is distributed through Steam on Linux.
"Lutris" is a GUI app that allows for easy management of all this WINE + addons thing for applications that aren't installed through Steam (Lutris exists because it can be cumbersome setting up and configuring a WINE installation for gaming. And Proton can behave a bit weirdly when launched from outside Steam due to certain modifications made by Valve).
A "wineprefix" is a folder thatstores all the useful information for the fake Windows environment that WINE uses. Most/all the user configurable stuff for WINE goes in there. You install an app with WINE, it automatically tries installing it to a C drive, which is a folder located inside the wineprefix. That app puts files in the AppData folder, it goes in a AppData folder inside a "user" folder in the wineprefix. You make a Windows registry edit in "WINE", that change gets saved to a file in the wineprefix. You configure which Windows version WINE should report itself as, that setting gets saved to the WINE prefix. I hope you get the idea. A wineprefix holds most/all the user configurable data relevant to your fake Windows environment. Also, you can have multiple wineprefix. For example, Steam's Proton creates a wineprefix for every Windows game installed.
"WineTricks" is an GUI application to help do some regular tasks inside a wineprefix.
"ProtonTricks" is WineTricks, but with extra features to make it easier to work on games installed through Steam and run with Proton.
Here are the steps for getting DLSS Tweaks working on Linux:
Setup your translation layers, install the game, and setup environment variables to enable DLSS in your DLSS supported game, and test it. (Check a different guide for this, the complexity and exact instructions change depending on certain factors)
Install DLSS Tweaks in the game directory, just like Windows. In some cases this works, in others it doesn't. For example, it doesn't work in Red Dead Redemption 2 where the dll needs to be renamed to XInput9_1_0.dll. If DLSS Tweaks doesn't work, then you will need to consult one of the guides from below.
Steam - Proton
This guide is for games you installed through Steam and are running with Proton.
Install ProtonTricks.
Open the ProtonTricks GUI
Select the game you're having issues with (For me, Red Dead Redemption 2)
Select the option Select the default wineprefix
Select the option Run winecfg
In the window that pops up, go to the Libraries tab.
In the New override for library section select or type in the name of the DLSSTweaks DLL and press Add
In the Existing overrides find the DLL you added, select Edit and ensure it's set to Native then Builtin (This step is probably unnecessary as it seems to be the default for new items)
Finally Apply the changes, close the window and ProtonTricks, and run the game. It should hopefully work.
Here is a short video demonstrating the process:
Using.Protontricks.to.enable.DLSS.Tweak.mp4
Lutris
This is games you installed through Lutris with WINE and are using Lutris to continue maintaining it.
Open Lutris
Select your application.
At the bottom of the Lutris UI, click on the upward arrow beside the WINE glass and select Wine configuration
Do steps 6-9 from the Steam - Proton section.
Here is a short video demonstrating the process:
Using.Lutris.to.enable.DLSS.Tweak.mp4
Standalone WINE - Option 1
This if for if you are using a standalone build of WINE with nothing special to manage it.
Run winecfg in a terminal.
Do steps 6-9 from the Steam - Proton section.
Standalone WINE - Option 2
This if for if you are using a standalone build of WINE with nothing special to manage it.
Install Winetricks.
Open Winetricks.
And do steps 4-9 from the Steam - Proton section.
There's no video since it looks almost identical to the ProtonTricks method due to ProtonTricks just being WineTricks but with extra tools to help with Proton games.
Generic
This is for all other services that use WINE as their backend for getting Windows games running on Linux.
Find out where the wineprefix is for your game.
Run winecfg on it, ensuring you use the WINE binary you use with that prefix to start winecfg.
Do steps 6-9 from the Steam - Proton section.
Note: The order in which I presented each option was in order of most common to least common. This leads to a little bit of a weird layout. For example, Plain WINE - Option 1 should probably be at the top of the list as it's the simplest, every other method would reference it, and every other method is just a different way of getting too winecfg (where Plain WINE - Option 1 just opens winecfg directly). But I put Proton then Lutris at the top because those are way more common than using WINE without some kind of manager (Steam and Lutris are managers)
Note 2: Some guides are missing for other popular options. For example the "Heroic Launcher" (An open source tool that allow the installing and running of games from the Epic Games Store) or Bottles (This appears to be similar to Lutris)
Might be nice if the DLL could monitor the INI for updates and then apply any new preset settings automatically, since there's no way to change preset at runtime with the release DLL.
Would probably need some way of keeping track of the games NVSDK_NGX_Parameter instance, we do hook the nvngx calls that are responsible for creating that, so hopefully can find a way to do it safely.
Was brought up how betas are pretty scattered on here right now, mainly because I'm usually posting test/beta builds to try helping with a specific issue someone is having, or to get feedback on a specific feature.
Some might want to keep up to date with the latest builds though so will try and keep this post updated when I post up a new build somewhere too.
Modern Warfare 2019: With the new dlss file (version 3.1.1) in the game folder, the game will automatically replace that with its original dlss file (version 2.3.4) every time it is launched, meaning preset overrides won't work. Not sure if DLAA still works with the old version.
Battlefield 5: This game doesn't automatically reject the new dlss file like the above, but with new file in place, the in-game DLSS toggle is greyed out. Putting the old dlss file (1.0.13) back and the toggle is available, but again, meaning preset overrides won't work and uncertain whether DLAA still works with the old version.
So DLSSTweaks doesn't seem to work well with these two games. For Modern Warfare 2019, it doesn't matter because SMAA T2x should be picked over DLAA anyway for ray tracing to work. But for Battlefield 5, only TAA is available so DLAA may be better here if we can get it to work. How to confirm is DLAA is working in Battlefield 5 with the old version of dlss file?
Is this possible as an option? It would be nice to have the ability to enable DLAA while still having the other modes available in the in-game options without needing to restart the game. I say ultra performance specifically becuse most people don't use that mode anyway.
I haven't seen any difference in mip map quality when selecting different modes with the DLAA mod enabled.
EDIT: this has implemented with the custom ratios.
Assetto Corsa Competizione does work with DLAA.
dlsstweaks.ini edited with:
ForceDLAA = true
OverrideAppId = true
DLAA = F (default is C)
Worked together with DLSS 3.1.1 DLL
For all my games, I have been using 0.123.8. All working great without issue, DLAA+F preset etc.
Updated to 0.123.11 for all my games. Same setup, same ini. However, it just does not work with this version.
in the log, for some games it's blank, for other games it can not find the dlss.dll
All .ini are the same. Even when I only change the DLSSTweaks .dll but keep the ini's, its not working. Using 0.123.8's dll makes it working again. So its definetly a .dll problem.
What I think is, it just doesn't load the DLSSTweak's DLL into the game. I'm not sure why tho. Whilst its working great with previous version.
Games that was working for 0.123.8 but not working with 0.123.11 now:
-Ready or Not
-Hitman 3
-Red Dead Redemption 2
Tested both 3.1.1 Public and 3.1.1 DEV version DLL
This would be nice to control because some games have it off by default. I know people like using the dev dll to turn it on for RDR2 becuse hair looks better. I've also noticed turning it on reduces ghosting in some games that have it off like A Plague Tale Requiem.
I did a search and saw someone verified it worked in a post by emoose that was closed a week or 2 ago. I tried the dev dll with OverrideDlssHud enabled, but nothing showed up...
I followed the instructions in the ini file to get the reg file to enable the onscreen indicator that shows DLSS working but even after adding it no game I've tested seems to show the indicator, Are there any extra steps ?
EDIT
Nevermind got it to work, The reg file only adds the entry into the registry but doesn't seem to add the correct value, You need to change the value in regedit -->
It seems like it doesnt apply when written like:
`
[DLSSPresets]
; Overrides the DLSS preset used for each quality level, set to Default to leave the preset set to whatever game/DLSS decided for it
; Or set to A / B / C / D / F to try forcing that preset instead.
; Presets were added in DLSS 3.1, similar to the old method of swapping out different DLSS DLL versions, now instead you can just set a preset for it
; Unfortunately DLSS might override these presets with ones decided by NVIDIA instead
; Enabling OverrideAppId above might help with those (at least it fixes DL2)
; (recommend testing with the dev DLSS DLL along with ngx_driver_onscreenindicator.reg to make sure the preset is being overridden properly)
; Note that some games could have graphical artefacts when certain DLSS presets are overridden onto them
; There's not much DLSSTweaks can do to help with that unfortunately, hopefully trying a different preset could help
DLAA = F
Quality = F
Balanced = F
Performance = F
UltraPerformance = F
`
Do i need to write the preset name in some other fashion?
Using dlsstweak's default dxgi.dll, DLSS 3.1.1 dll, and ForceDLAA setting = true, DLAA is working for Bannerlord. Works in singleplayer and any multiplayer mod which does not use BattlEye anti cheat (works fine in cRPG mod). Trying to launch native multiplayer Bannerlord will crash because of BattlEye flagging the dxgi.dll.
Visual quality is great and does not suffer from the same scaling/ghosting problems that current patch Bannerlord has when using dlss.
I am aware this is an odd request. But some games force TAA, notably Hitman 3. I'm wondering if this DLSS workaround can be used to render the image at 100% resolution and just not apply DLAA after. Thus rendering an aliased image at native resolution.
DLAA is still an improvement over TAA, so either way I'm happy with what DLSSTweaks achieves.
I actually understood everything that a good alternative for the registry entry was found as an alternative to the dgxi.dll hook. (What worked before with the dgxi.dll) The only thing I don't understand is: When I've run the registry command, which files i need? the dlsstweaks.ini and the newest nvngx.dlss version?
what i have is: dlsstweaks.ini, the newest nvngx.dlss version and the enabled reg file, so iam fine?
The instructions are a bit confusing because it doesn't say whether I need the nvngx.dll or not with a reg file. name it to nvngx.dll - I thought you don't need it with the reg command.
Latest commit added hooks that should let Vulkan titles work with it (eg. RDR2), I don't currently have any VK games to try with myself though, would appreciate anyone trying it out.
DLSS3.1 added a new way of updating OTA, but it requires the game dev to call into a DLSS function to work, so likely won't help any older titles that don't get updated by their developers...
Could probably add an option to make our DLL call into it, but it is mentioned that calling it might take some time to complete while it checks for updates + downloads them, so maybe would need to add some kind of prompt to let user know that updates are being checked/downloaded.
Not entirely sure how much it'd be worth it though, NV might only ever push updates for the AppIDs that are actually signed up for it, maybe worth testing things out in a couple months once they start pushing updates there.
Currently vanilla RDR2 uses DLSS version 2.2.10. As far as I know, the DLL hasn't been officially updated a single time ever since it was implemented into the game, in the July 2021 update. Steam users can easily update their DLSS by replacing the DLL in the directory, without any further worry. However, users who own the game on the Rockstar Games Launcher have to constantly worry about the replaced DLL being automatically downgraded by updates, and the game's directory folder having its permissions completely screwed over by said updates. The only way to play the game on RGL with an updated DLSS file is to wait for the game to finish downgrading itself, clicking the "Play" button inside the launcher, and then after a few seconds finally replacing the file in the directory with the updated DLSS DLL, right before the game opens. Keep in mind, the next time you want to play the game again you will have to let the launcher update the game to downgrade the file once again, and do the same process all over again.
So here's my idea. What if DLSSTweaks automatically updated the DLSS DLL to the latest version every time the game was booted up, right before it actually opens, and automatically fixed the directory folder permissions? I feel like this would be the perfect solution for this issue RGL players have been having for months.
Also, completely unrelated to this issue, but an option to disable the DLSS sharpening would be an awesome addition.
It's a little strange to me though since when I tried forcing the PerfQualityValue parameter to UltraQuality to find what DLSS would set the resolution to, it always returned 0x0 resolution for me - maybe it does get enabled for certain appIds passed to DLSS though?
Some mentioned that it only seemed to show up after updating to DLSS3.1 (eg. this thread, where they also posted a screenshot of Ultra Quality showing an option in game), we know that 3.1 can configure presets per-appId, so maybe ultra quality was also now enabled for some apps too.
If anyone owns one of the games mentioned there (Hogwarts Legacy, RDR2?) and can test with the dev DLSS 3.1 DLL to see what "Ultra Quality" shows as on the overlay it'd be appreciated.
E: oh it's possible that DLSSTweaks itself might be the cause, if the game is detecting the available quality levels by asking DLSS for the resolution of each of them, DLSS by itself would have returned 0x0, but DLSSTweaks with DLSSQualityLevels enabled would pass 77% of screen res:
When I removed UltraQuality I figured it wasn't a big deal to leave that there in case future games do include it (and also left in the code to read value from INI too, just removed it from the INI itself), but if there are current games that this helps expose the setting in maybe it could be worth re-adding back to INI, with a note or something next to it.
Just wanted to report I tried the version 0.200.2 in Dead Space (the recently released remake), the things i tested (alternative higher than default quality resolutions) works fine, uses preset D as default for all except ultra performance, which uses F. Did not have to use OverrideApp or OverrideAutoExposure. Using the default nvngx.dll filename with no problem.
It still has the same issues as DLSS had to begin with in this game, that some of the ui that is rendered "in-world" so to say, get blurry.
These objects are ui and signs on doors and other holographically projected objects, these do get less blurry with alternative higher resolutions.
Still, a workaround is needed to make these things less blurry and closer to native on TAA, a known one is setting antialiasing transparency multisampling to 0x00000008 AA_MODE_REPLAY_MODE_ALL and specific negative LOD bias in nvidia profile inspector (-0.5 for playing at default 0.66667 quality for example, around -1.0 for balanced, -1.5 for performance, and maybe -1.8 or something for ultra perf, i have not experimented with a value for this for my own personal higher quality setting, but i assume 0.85 would look better with it set to something like -0.2, and 0.75 or 0.7619 would be ok good with -0.3).
Doing this, however, results in the side effect that the glitch effects and Moiré pattern on these objects and on menues gets stronger (these things have a Moiré pattern and "glitching" to give the effect of an imperfect holographic projection in the air).
Running it in something 0.7619047619 or 0.85 does look almost identical to to native on TAA except for these objects (although their sharpness does improve over the default quality mode) which has been an issue with dlss in this title since the release so it doesn't have anything to do with DLSSTweaks as such.
This is the first time i use github for anything else than downloading software. I hope the informal format of this report is ok.
Edit: ok so now I also tried DLAA, F is the default preset for that as expected. The blurry in-world UI objects are still blurry, not as bad as in the DLSS levels.
Setting it to D however, sharpened things up quite a lot, but then some signs in the game with scrolling text get ghosting on the letters when behind menues (maybe it does a very slight blur or some other transparent overlay on distant objects when menu is up or you view those scrolling signs through transparent objects) i've never noticed this before in the othe dlss settings but it's not something that would be easy to spot. Anyway, such a scenario won't happen that often in game unless you have the menu open and you are looking at such specific details in the world behind you at the same time...
DLAA with D really actually looked great even without any of the trickery in nvidia profile inspector that i mentioned above, it is softer and has any surfaces where lighting or reflections give this "boiling" jitter (this is the same effect as rainy streets in Cyberpunk 2077, which gets significantly improved, (but still occasionally visible) in that game only by DLSS) it smoothes that boiling jitter over which is a big improvement over TAA, performance is basically the same, in a room with 84 fps on TAA native high quality, DLAA with either D or F both gave 83 FPS at the exact same place, so a tiny tiny drop in fps, but D does look better on DLAA here, F just blurs everything too much at least on 2560x1440.
I'll keep adding more info here if as I play around with this and try out the other presets and find anything useful. I might also try and see if using transparency multisampling 0x0000008 or a slight negative LOD bias setting could help, but i don't see why since we're now at native, maybe it just doesn't understand that when dlss is turned on but on the other hand that is exactly when such a thing would be needed to be enabled...
Hogwarts legacy gets stuck at starting warning message or crashes on start with some of the builds of DLSSTeaks, particularly builds after DLSSTweaks 0.123.10.
DLSSTweaks versions tested:
0.123.8 ✅
0.123.9beta4 ✅
0.123.10beta2 ❌ stuck on warning screen
0.123.10beta4 ❌ stuck on warning screen
0.123.11 ❌ stuck on warning screen
0.123.12beta3 ❌ stuck on warning screen
0.123.12beta3a ✅
0.123.12beta4 ❌ crash on start
0.123.12beta4a ❌ crash on start
0.123.12beta4b ❌ stuck on warning screen
0.123.12beta5 ❌ stuck on warning screen
It as been reported by some people that this bug is randomly sidesteped by trying to start the game multiple times. I have not experienced this, the versions that don't work are consisted in their behaviour.
I am not using anuy other software appart from DLSSTweaks.
DLSS version 3.1.1 (v1) from tech power up
Computer specs and relevant software versions:
GPU: Nvidia 2070 Super Driver 528.49
CPU: intel 10980XE
Windows 11 Version 22H2 Build 22621.1265
DLSS version 3.1.1 (v1) from tech power up
Previous discussion on this problem on these threads: #28#22
I know it would probably be hard to do but is there a possibility to add frame generation to games that don't support it natively, as it would be massive for any 40 series owners in boosting their framerate.
If the dll is named dxgi.dll and ForceDLAA is set to true, DLSS is disabled entirely, resulting in a raw aliased image.
If the dll is named XInput9_1_0, the game silently crashes before it can boot.
All other dll names recommended in the ini won't inject at all. (blank entry in the log file, and the DLSS indicator overlay reads DLSS at Quality)
Suspect this is caused by the game using a DX11/Vulkan hybrid render system. (where it uses DX11 for main rendering but also uses Vulkan to handle ray tracing)
edit: Should probably mention I'm using the 3.1.1.0 DLSS dll. (dev build so I can use the DLSS indicator overlay after activating it in the registry)
Is it possible to add a sharpness value to the .ini? Most of the games I have used DLSS for have no way to adjust its sharpness and end up looking quite blurry with no way to improve it other than using reshade
Recently I have been messing about with things like Reshade, DXVK and SpecialK to tweak games which are not running correctly.
Some recent examples of this is that Assassins Creed Odyssey gains something like 10-20% performance by simply using DXVK on Windows 10 (it is technically meant to be used in Wine on Linux). This got me into some kind of optimization mode, and I wanted to attempt to use at least one or two of the known gaming tweak tools to see what it did in different games.
But as they are all different projects, with different purposes, I have been having a bit of trouble using them in the way I want.
Many of these tools alter the same file, also. The "dxgi.dll" file (I believe this is mostly for DirectX11-12 games). This makes it impossible (to my knowledge) to use even just two tweaks if they both alter that same file.
I stumbled upon the "GShade" project, which looked promising. It combined Reshade with an easy way to also install DXVK, as well as allowing you to keep track of which games have these tweaks locally (since DXVK is literally only a single file, it can get difficult to keep track of which games have the tweak "installed"). But if you haven't read it yet, GShade is essentially dead.
Now there is also this project which also uses the "dxgi.dll" file to allow the use DLAA in games which don't have it by default and it's just getting to be too much...
So what I am simply wondering is if you know of a way to combine DLSSTTweaks with these other projects, or perhaps if there is any tool to help either/both keep track of which games have which tweaks enabled and to combine multiple tweaks (e.g. both DXVK and DLSSTweaks) in the same .dll file (e.g. "dxgi.dll")?
Note: I believe there is a way to use both Reshade and SpecialK without specifically using the "dxgi.dll" file, but for DXVK I do not believe there is such a workaround.
Is there a list of games that people tested and show what is the best DLSS preset to use in said games? Or is there a way to determine which preset is the best?
Take Shadow of Tomb Raider for example - a game that has particularly bad anti-aliasing implementations. Both TAA and SMAA 4X are blurry. Forced DLAA through DLSSTweaks looks way better. I tested different presets and found that A to D gave crisper picture compared to F (not sure about other potential drawbacks though). F is normally recommended for DLAA but it seems like it's not the case in this game.
Just recently saw that CyberFSR2 / DLSS2FSR uses a different method to hook DLSS functions by wrapping the nvngx.dll instead - I didn't think that was possible since DLSS SDK code had a bunch of signature checking stuff inside, but seems they found a registry edit that can disable that, really wish I saw this earlier 😅
Wrapping nvngx.dll would make installing this a lot easier, and would probably reduce number of hooks we need too (and probably help with some of the hanging issues some people seem to get)
I wonder how compatibility is with that though, it's possible the method they use to disable sig check might have only been added in later DLSS SDK versions, so older games might have issues with it...
Does anyone know of any games that have issues with CyberFSR2? I see some games mentioned on their issues page but not much detail on them, some of them might just be issues with games detecting AMD and disabling DLSS option too.
Maybe can find a way to let this work as both an nvngx.dll wrapper & keep the existing dxgi.dll+DLL-load-watch method, but if the nvngx.dll method is mostly compatible I'd be happy to remove the DLL-watching code.
E: ah found a spreadsheet linked in an issues page there, seems to work across most games under NV cards at least.
I'm not really happy with how big the gap between DLSS Quality (66%) and native (100%) resolution is.
Could it be possible to adjust the scale factors of each DLSS factor with this tool? For example, overriding DLSS Quality to 75% would allow 1080p -> 1440p upscaling instead of 960p -> 1080p like it is right now.
There are very few games where you can freely adjust the internal resolution, such as Control. But I'd love to have this in any DLSS game, especially Cyberpunk.
You can remove this one from the non-working list. There's two exes in this game and I just noticed I put the dlsstweak files in the foler with the wrong exe. For all ue4 games so far, it's never the exe in the main foler. It's usually the other exe with Win64-Shipping.exe in the name in a different folder.
in 0.123.8, it opens normally and frame generation works perfectly. However, when trying the newer version 0.123.11, it gets stuck in the first studio screen and stops the game (even the process gets stuck as well no changelogs).
So I downloaded the latest 3.1.1 dlss file from TechPowerUp, pasted in the game's folder (Modern Warfare 2019 - quite an old game), pasted the dlsstweaks.ini and dxgi.dll also, edited the dlsstweaks.ini (ForceDLAA = true, OverrideDlssHud = 1) and then launched the game, enabled dlss under game's settings, but I saw no indication that the game was running in DLAA mode. If I exit the game then I see a log file named dlsstweaks, but it's empty inside. So is DLAA working? Why does the command line OverrideDlssHud = 1 not seem to do anything?
I have read the documentation here and also of a reddit comment that explains the different presets, but is there a general notion as to what the best preset is?
Seems they changed things around the DLSS HUD drawing code in 3.1.1v2, so now the pattern we use to allow changing it at runtime (via WatchIniUpdates) doesn't work any more, and it falls back to the RegQueryValue hook instead (which only allows changing the hud status once, during startup...)
The pattern there wasn't that great anyway since it only matched 3.1.1, earlier DLLs used almost the same code but with different offsets inside which broke the pattern, was going to try adding a way to search for that changing offset so the same pattern could work on those versions too, but seeing as 3.1.1v2 removed this code entirely now I guess finding a different method would be better.
I was diagnosing a startup deadlock in Atomic Heart and discovered the code being used to freeze all threads during hook install deadlocks 9 times out of 10.
I went through hell implementing this logic safely in Special K and the big takeaway from my experience is NOT to use Toolhelp32 snapshots. They are slow as hell to capture and unsafe to walk from within a running process. In truth, that API is meant to be used by a separate debugger process on a suspended process.
NtQuerySystemInformation (SystemProcessInformation, ...) should be used instead.
The only way I was able to get DLSSTweaks working in Atomic Heart (Microsoft Store version, if it matters) was by disabling the SuspendThread (...), Get|SetThreadContext (...) and ResumeThread (...) calls.
I effectively gimped your thread freezing system, but deadlock goes away and hooks are successful despite multiple threads running.
I believe if you throw out the dependency on Toolhelp32 and snapshot using NtQuerySystemInformation instead, you can walk over these threads and safely suspend/resume.
Perhaps an INI option to forgo freezing and thawing threads during hook installation could serve as a temporary solution?