No FSR. No fallback. NVIDIA's own frame generation, on Ampere.
Full package · 140 MB · nothing else needed
Unlock only · 4.5 MB · if you already run ERSS-FG
NVIDIA restricts DLSS Frame Generation to Ada: RTX 40 and newer. The restriction
is a threshold comparison, not a capability test: the DLSS-G runtime already
ships precompiled sm_86 kernels, and sm_86 is exactly what every RTX 30 GPU
runs.
This is the setup that turns that fact into working frame generation in ELDEN RING, and a way to prove from the logs that the frames really are NVIDIA's.
The entire restriction is one number.
- "original_min_arch": 400 ← Ada + "bridge_min_arch": 368 ← 0x170, Ampere GA10x
| Before | Checking DLSS-G support: the feature is not supported, error: 6Loading FSR Frame Generation 4.0 DX12 |
| After | Checking DLSS-G support: the feature is supportedEnabling DLSS-G |
Measured on a GeForce RTX 3060 Laptop (GA106, sm_86), driver 610.88,
Windows 11 26100, ELDEN RING 2.7.0.0, offline, Easy Anti-Cheat disabled.
Two mods that have never heard of each other, each supplying exactly what the other is missing.
flowchart LR
EXE["eldenring.exe"] --> D3D12["D3D12.dll<br/><i>ERSS loader</i>"]
D3D12 --> ERSS["ERSS-FG.dll<br/><b>huutaiii</b>"]
ERSS -.->|"imports<br/>version.dll"| VER["version.dll<br/><b>sdli1995</b><br/><i>sm_86 unlock</i>"]
ERSS --> SL["Streamline 2.11.1"]
VER ==>|"answers<br/><b>supported</b>"| SL
SL --> DLSSG["sl.dlss_g<br/>cubin_sm86"]
DLSSG --> OUT(["generated frames"])
style VER fill:#76b900,stroke:#4a7500,color:#fff
style DLSSG fill:#1f6feb,stroke:#144a9e,color:#fff
style OUT fill:#2f7d32,stroke:#1e5620,color:#fff
ERSS-FG does the genuinely hard part: the Streamline host, DLSS upscaling, and the depth, motion-vector and camera data frame generation consumes. It asks Streamline whether DLSS-G is supported and gives up when the answer is no.
dlssg_for_sm86 changes the answer and points DLSS-G at its sm_86 kernels.
On its own it can add nothing to a game with no integration.
Put both in one process and it works. That combination is what this package is. No file is patched, unpacked or rebuilt.
Why the proxy loads at all (the non-obvious part)
dlssg_for_sm86 ships a version.dll proxy, and eldenring.exe does not
import version.dll. Dropped in on its own it would sit there doing nothing,
and it would look exactly like the unlock had failed.
It works because ERSS-FG.dll imports version.dll itself, as does
eossdk-win64-shipping.dll, and Windows resolves that import from the game
folder. ERSS loads its own DLL about five seconds before it initialises
Streamline, so the proxy is armed with time to spare.
Renaming the proxy to winmm.dll does not work. It exports only the 17
version.dll functions, so the game would fail to start.
Three proxy slots end up in use and none of them collide:
| Slot | Owner |
|---|---|
D3D12.dll |
ERSS-FG loader |
dinput8.dll |
ELDEN RING Mod Loader / ModEngine |
version.dll |
dlssg_for_sm86 |
Requirements: a GeForce RTX 30 GPU (all of them are sm_86), Windows 10 or
11, DirectX 12, Easy Anti-Cheat disabled, offline play.
Close the game completely first. Neither mod reloads settings while running.
Take one of the two downloads and extract its contents into the folder holding
eldenring.exe.
| Download | Size | Contents |
|---|---|---|
| Full package | 140 MB | ERSS-FG 4.14.1 included. Nothing to install first. |
| Unlock only | 4.5 MB | Needs ERSS-FG 4.14.1 already installed and working. |
Either way three files land in the game folder, and that is the whole install:
version.dll the sm_86 unlock
dlssg_sm86.ini its settings
ERSS2/ERSS-FG.toml the profile that selects DLSS-G
Important
Already using ERSS with settings you care about? Do not copy
ERSS2\ERSS-FG.toml. It would replace them. Change these four values in
your own copy instead.
| Section | Key | Value |
|---|---|---|
[FrameGeneration] |
FrameGenMode |
2, DLSS-G instead of FSR3 |
[DLSS-G] |
NumGenFrames |
1 = 2X · 2 = 3X · 3 = 4X |
[Reflex] |
ReflexMode |
0 off · 1 Low Latency · 2 + Boost |
[Renderer] |
LatencyReductionMode |
1 |
Play for a few seconds, quit, and run:
.\verify.ps1 OK unlock active on real sm_86 hardware - NVIDIA GeForce RTX 3060 Laptop GPU
OK kernels: precompiled sm_86 cubins
architecture threshold 400 -> 368 (368 = Ampere GA10x)
multi-frame offered: up to 4X
OK ERSS: DLSS-G reported as supported
OK ERSS: DLSS-G enabled
OK no FSR frame generation in this session
OK Streamline loaded sl.dlss_g
OK Reflex active
Native DLSS Frame Generation is running on an RTX 30.
This is not decoration. The in-game overlay is ERSS's own and looks identical whether the frames come from NVIDIA or from FSR. The logs are the only place the difference shows.
What is in each folder
Both are in this repository as well as in the release, so you can read every file before downloading anything.
full/ is the complete drop-in, 211 MB, 20 files:
full/
├─ D3D12.dll ┐
├─ ERSS-FG.dll │ ERSS-FG 4.14.1, by huutaiii
├─ ERSSReShadeStub.addon │
├─ ERSS2/bin/ ┘ Streamline, DLSS, DLSS-G, FSR, XeSS runtimes
├─ ERSS2/ERSS-FG.toml the DLSS-G profile
├─ version.dll the sm_86 unlock, by sdli1995
└─ dlssg_sm86.ini its settings
release/ is the same thing without ERSS-FG: version.dll,
dlssg_sm86.ini and ERSS2/ERSS-FG.toml.
Every binary is byte-identical to its author's own release. Confirm any of them
against the SHA-256 list in
THIRD-PARTY-NOTICES.md:
Get-FileHash .\full\ERSS-FG.dll -Algorithm SHA256 # 5912C442...
Get-FileHash .\full\version.dll -Algorithm SHA256 # 03D44523...Delete version.dll, dlssg_sm86.ini and dlssg_sm86\, then set
FrameGenMode = 1. ERSS is untouched throughout and keeps working as before.
Two independent logs have to agree. verify.ps1 reads both; this is what it
looks for.
In ERSS2\ERSS-FG.log, ERSS accepted the feature and did not fall back:
Checking DLSS-G support: the feature is supported
Enabling DLSS-G
If Loading FSR Frame Generation appears anywhere in that log, the frames are
not NVIDIA's.
In dlssg_sm86\logs\backend_*.jsonl, the unlock reports what it actually did:
{"active":true,"actual_sm":86,"executed_on_sm86_hardware":true,
"image":"cubin_sm86","gpu":"NVIDIA GeForce RTX 3060 Laptop GPU"}
{"event":"feature_requirements","original_min_arch":400,"bridge_min_arch":368}
{"event":"mfg_capability","original_max":1,"reported_max":3,"changed":true}| Field | Meaning |
|---|---|
image: cubin_sm86 |
precompiled sm_86 kernels, not a PTX JIT fallback |
400 → 368 |
the architecture threshold; 400 is Ada, 368 is 0x170, Ampere GA10x |
original_max 1 → reported_max 3 |
multi-frame up to 4X is offered |
In ERSS2\sl.log, Streamline no longer says
Disabling DLSS-G since it is not supported on current hardware or
Ignoring plugin 'sl.dlss_g'.
Nothing to install. ERSS already hosts sl.reflex, and DLSS-G depends on Reflex
for frame pacing, so leave it on.
ReflexMode = 2 adds Boost, which raises GPU clocks when the CPU is the
limit. On a laptop that is mostly heat and power for little gain, so try 1
first.
Expect version.dll to be flagged as Program:Win32/Contebrew.A!ml.
Why, and why it is a false positive
!ml means the verdict came from a machine-learning model, and Program: means
"unwanted shape", not "known malware". The shape it recognises is real. That one
file:
- is a proxy DLL that takes a system DLL's name and re-exports its 17 functions
- hooks APIs at runtime with Microsoft Detours
- writes executables to disk and loads them, unpacking a runtime into
%LOCALAPPDATA%\DlssgSm86\bundles\ - carries a 10 MB compressed payload, high entropy and packer-like
- is unsigned, while the NVIDIA runtime it replaces is signed
Every one of those is legitimate here. Every one is also what a loader does, so the classifier fires. For what it is worth, a completely unrelated proxy DLL written from scratch during this project drew the identical verdict. What trips it is the shape, not the contents.
Add an exclusion from an administrator PowerShell:
Add-MpPreference -ExclusionPath "D:\SteamLibrary\steamapps\common\ELDEN RING\Game"A false-positive report to Microsoft is worth filing. If accepted it fixes this for everyone, not just you.
- ELDEN RING 2.7.0.0 is newer than the version ERSS supports (2.6.1.0). ERSS logs a warning and works anyway on this build; a game patch may break it.
dlssg_for_sm86's own testing was on an RTX 3080 Ti with driver 591.86. The RTX 3060 Laptop above is a different GA10x part on a newer driver.QuestPath.dllthrows access violations under ERSS on this setup. They are caught and the game keeps running, but they fill the ERSS log.- Multi-frame above 2X is offered by the unlock; its image quality has not been evaluated here.
- Frame generation and Easy Anti-Cheat are not used together. Offline only.
This package is a combination. The parts belong to the people who built them.
| Who | What |
|---|---|
| huutaiii | ERSS-FG, the Streamline integration everything else here depends on. It does the hard part: the host, the upscaling, and the depth, motion-vector and camera data DLSS-G needs. Not redistributed here; get it from Nexus. |
| sdli1995 | dlssg_for_sm86, the sm_86 unlock, derived from Nukem9's GPLv3 dlssg-to-fsr3. |
| NVIDIA | Streamline and the DLSS-G runtime, including the sm_86 kernels that made any of this possible. |
| Lumi | The combination, the settings profile, the verification and these docs. |
Every third-party file is byte-identical to its author's release. Check for
yourself against THIRD-PARTY-NOTICES.md, which lists
a SHA-256 for each one.
If you are one of these authors and would rather your files were linked than shipped, or removed, open an issue and it will be done, no argument.
MIT © Lumi, covering the profile, the scripts and the documentation.
Third-party files keep their own licences; see
THIRD-PARTY-NOTICES.md.