Releases: NIGos/dlss5-dx11-bridge
Release list
v1.0.26
Fixed
- A game that reports its input and output dimensions the wrong way round has them swapped back. DLSS never returns an image smaller than the one it is given, so an output below the input is not a contract. Four engines write them inverted: Gallipoli, The Elder Scrolls Online, Phantasy Star Online 2 and House Party's Unity plugin. Earlier releases patched the output from the output texture instead, which works only while the allocation equals the display size; under dynamic resolution it never does, and the feature that was built could not be evaluated. Aimed at issues #5 and #8; not verified in either.
- An exposure texture supplied by the game is mirrored to the D3D12 side. Mount & Blade II: Bannerlord creates with
AutoExposureclear and supplies a 1x1 exposure texture every frame; the bridge copied the flags faithfully and dropped the texture, so its feature accumulated with no exposure at all. Before 1.0.16 the forcedflags=107carriedAutoExposureand hid this. The mirror uses the same typed-format conversion as the other four, without which a typeless exposure texture — Phantasy Star Online 2 supplies one — would have kept the defect. - The parameter block no longer keeps a released pointer when the exposure mirror is dropped: the key is cleared and the GPU drained first. The block is allocated once per session and NGX does not reference-count what it holds.
nvngx_dlssnr.dllandnvngx_dlss.dllare looked for beside the game as well as beside the add-on, and the log says which. ReShade can load add-ons from another directory, and the message claimed the game folder while only the add-on's had been searched.- The NGX data path is the game's folder when the two differ. Pointing NGX at a directory holding none of its files was never intended.
Added
- The fault address and the module that owns it, as an offset into that module, when NGX initialisation or device creation raises an exception. An absolute address changes every run.
probe=1creates a D3D12 device and callsInit_Extwithout waiting for the game to call DLSS, for titles whose DLSS comes from another add-on. Off by default.- Every add-on's load address is listed.
Changed
- The reactive mask was probed under a name that is not an NGX key. It is
DLSS.Input.Bias.Current.Color.Mask; the log asked forBiasCurrentColorMask, so every "absent" it has ever reported was a probe of a name nothing sets. Whether any title supplies one is still unknown. The transparency-layer keys are probed for the same reason. - Absent resources distinguish a key the game left unset from one this runtime does not have. NGX results are named rather than printed as signed decimals: the
-1160773616in every previous log was0xBAD00010,UnsupportedParameter.
Notes
- Verified on Baldur's Gate 3 only in that the three dimension repairs stay silent there, the contract is unchanged, and the session is clean. None of the fixes above has been seen doing its work.
- Issue #7 (Batman: Arkham Knight) is not fixed. It faults in
Init_Extlike Prey 2017; this release is the first that names the module and offset.
v1.0.25
Fixed
- The D3D12 device handed to NGX is ReShade's underlying device, not its proxy. ReShade wraps every D3D12 device created through the export, this add-on's own included, and then broadcasts
init_device,init_pipeline,init_samplerand the rest to every loaded add-on for everything built from it. Luma is a DX11-only framework whose compile-time API guard is off unless a game opts in, and Prey 2017 does not: itsOnInitDevicereturns early for a non-D3D11 device, so ReShade never gives it per-device data, and every other handler then dereferences that null.NVSDK_NGX_D3D12_Init_Extcreating pipeline state on the device was the first such event, and it faulted at an address insideLuma-Prey.addon. The proxy is now unwrapped through ReShade's ownIID_UnwrappedObject, so no other add-on is handed D3D12 objects it never asked for.unwrap=0indlss5-dx11-bridge.cfgrestores the old behaviour. Aimed at Prey 2017; not verified there. - No module is patched while this add-on's own NGX initialisation is running. The loader notification runs under the loader lock and was enumerating modules, reading version resources from disk and writing jumps into code. The guard was missing from the 1.0.24 binary; it is present here and a log line marks it running.
Added
probe=1creates a D3D12 device and callsNVSDK_NGX_D3D12_Init_Exton its own, without waiting for the game to call DLSS. Prey has no DLSS of its own, so removing the add-on that provides it also removed every call and left nothing to test. Off by default.- Fault addresses are reported as an offset into the owning module, and every add-on's load address is listed. An absolute address changes each run and tells the owner of that module nothing.
Notes
- Verified on Baldur's Gate 3, whose device is also wrapped: the unwrap runs, the session opens, and 17,000 frames and three feature rebuilds follow.
- Prey 2017 is unverified. The diagnosis predicts the session now opens there; if it does not, the diagnosis is wrong.
- On ReShade older than 6.6 there is no proxy to unwrap and behaviour is unchanged.
v1.0.24
Fixed
Correction. The first item did not reach this binary. The edit that guards the loader-lock callback was lost before the file was written, so
OnDllLoadedstill scans and patches unconditionally here. Present in 1.0.25, where a log line marks it running. The remaining items in this release are unaffected.
- No module is patched while this add-on's own NGX initialisation is running. The loader notification runs under the loader lock, on the thread doing the load, and it was enumerating modules, reading version resources from disk and writing jumps into code.
NVSDK_NGX_D3D12_Init_Extloadsnvngx_dlss.dllitself, so in Prey 2017 that notification arrived inside NGX's own initialisation and patched the snippet NGX was setting up;Init_Extfaulted 169 ms later. The scan is now deferred to a call site holding no lock. Aimed at Prey 2017; not verified there. - The DRED retry added in 1.0.21 did not turn DRED off.
D3D12_DRED_ENABLEMENT_DISABLEDis written nowhere in the add-on, so the second attempt ran under the identical setting and the message announced an action that never happened. Removed.dred=0indlss5-dx11-bridge.cfgremains the only way to make an attempt without DRED. - The command queue, list and fence event are checked before the session is marked ready. All three were created unchecked and dereferenced on the first frame. A null fence event was the worst of them:
SetEventOnCompletionon a null handle blocks the render thread with no timeout. - A feature handle reused by NGX for super resolution is dropped from the other-features table. Nothing removed entries and NGX recycles freed handle addresses, so a recycled handle made every later evaluate take the "not super resolution" path for the rest of the session.
- Layer slots are reused after a module unloads. Each unload and reload of an NGX module burned a slot permanently.
Added
- The fault address and the module that owns it are logged when NGX initialisation or D3D12 device creation raises an exception. Three competing explanations previously produced the same log line.
Notes
- Every item here was found by reading the code, not by reproducing it. None is verified in the positive: Baldur's Gate 3 reaches none of these paths and was used only to confirm nothing regressed.
- Prey 2017 without the OptiScaler proxy present still faults in
Init_Ext, so the proxy is ruled out as the cause, as are the NGX module choice fixed in 1.0.22 and the SDK version constant. - Verified on Baldur's Gate 3.
v1.0.23
Fixed
- The DLSS render preset is copied to the D3D12 feature. All six
DLSS.Hint.Render.Preset.*keys are mirrored when the game sets them. The preset selects which DLSS model runs, so the two sides were upscaling with different models and the neural-rendering add-on worked from the D3D12 one. Prey 2017 reaches DLSS through Luma, which sets these; DLSSTweaks, OptiScaler and many games set them directly. UnlikeMV.Scale,nvsdk_ngx_helpers.hdoes not write these keys, so an absent one is left absent rather than given a value.
Added
- A module that exports the NGX entry points but is not the driver's loader is named when the D3D12 session faults. Prey 2017 runs OptiScaler installed as
WINMM.dll: it patches code inside the driver's NGX module and opens its own session on it first, which is the difference from titles where the same driver and module initialise. The log now says so and names the test — running without the proxy.
Notes
- Baldur's Gate 3 sets no render presets and loads no NGX proxy, so both additions were verified only in that they stay silent. Neither has been seen doing its work.
- Prey 2017 on 1.0.22 takes the correct NGX module and still faults in
Init_Ext. The module choice fixed in 1.0.22 was a real defect but not the cause there. The SDK version is ruled out: Baldur's Gate 3 initialises with the same version, driver and module. - Verified on Baldur's Gate 3.
v1.0.22
Fixed
- The NGX D3D12 entry points are taken from the driver's loader, not from whichever module exports them first. Prey 2017 loads a third-party
WINMM.dllthat exports them too. It comes from the game folder, so it was enumerated ahead of the driver, and itsInit_Extfaulted — while the DLSS 5 add-on had hooked the driver's copy, leaving the two add-ons on different NGX modules._nvngx.dllnow wins wherever it lives; a proxy in the game folder under that name still wins, because it is the one the game itself reaches. Aimed at Prey 2017 and any title with an NGX wrapper beside it; not verified there.
Added
- The module the NGX D3D12 entry points came from is logged. Establishing this previously meant comparing an address against a module base by hand.
Notes
- Prey 2017 on 1.0.21 creates its D3D12 device and fails at
Init_Ext. The device-creation fault addressed in 1.0.21 no longer occurs there, so the retry with DRED off has still never run. - Verified on Baldur's Gate 3.
v1.0.21
Fixed
Correction. The retry below did not do what it says.
D3D12_DRED_ENABLEMENT_DISABLEDis written nowhere in the add-on, so the second attempt ran under the identical setting and the message announced an action that never happened. Removed in 1.0.24.dred=0indlss5-dx11-bridge.cfgis the only thing that produces an attempt without DRED.
- Device creation is retried once with DRED off when the first attempt raises an exception. DRED is switched on immediately before that call and is the only thing this add-on changes ahead of it, so it is taken back out rather than asking anyone to edit a file. Aimed at Prey 2017; the retry path has not run on a machine where device creation succeeds.
Added
- The NVIDIA driver version, alongside the Windows one. Reports carry
32.0.16.1656, discussions use616.56. - A warning when the driver is older than the one this release is verified on. Final Fantasy XIV on 560.94 could not create a neural-rendering feature and updating the driver fixed it.
- The denoising capability block reports its result by name and its declared minimum driver. A driver that does not carry the capability key at all is called out: that is what Final Fantasy XIV showed before the update. The minimum shown belongs to Ray Reconstruction and does not speak for neural rendering, which has no capability key of its own.
- Frame timings are marked when the game window is not in focus. An unfocused window changes the frame interval and the bridge's share of it, and the figure then reads as a regression that is not there.
Notes
D3D12CreateDevicein Prey 2017 carries one hook, ReShade's, with the same bytes after the jump as a title that works. A second injector was ruled out.- Verified on Baldur's Gate 3 and Final Fantasy XIV.
1.0.20
Fixed
- Parameters the game does not set now carry the neutral from
nvsdk_ngx_helpers.h. That header never leaves one unset:MV.Scale,DLSS.Pre.ExposureandDLSS.Exposure.Scaleall become1.0, and the subrect bases come from a zeroed struct. Trails beyond the Horizon sets none of them. 1.0.17 invented-1.0forMV.Scaleand reversed every motion vector, which was the smear; 1.0.18 sent nothing and left it to an undocumented default, which was the flicker. Confirmed fixed on Trails beyond the Horizon: the smear and the flicker are both gone. - Enabling DRED and creating the D3D12 device are wrapped in exception handlers. Prey 2017 faults inside
D3D12Core.dllduring device creation. Prey now loses DLSS 5 rather than the game. Aimed at Prey; not verified there. d3dcompiler_47.dllis loaded from System32, not by the default search order, which prefers the game's own copy. The Elder Scrolls Online ships one, and renaming it away is what made ESO work with this add-on loaded. The path taken is logged.
Changed
- The whole of the DLSS 5 add-on's
ReShade.inisection is read, not keys beginningNR. Version 3.3.5 introducedEnableHooks, which decides whether it hooks anything at all. D3D12CreateDevice's prologue is logged before it is called. ReShade hooks that function by design, so a jump there is normal.
Notes
- ESO with the game's
d3dcompiler_47.dllin place is the test this release needs. No renaming should be required. - The host-executable hold-back added in 1.0.17 was not what fixed ESO: it was already in force in 1.0.19, which still needed the rename.
- Verified on Baldur's Gate 3.
1.0.19
Fixed
- The host-executable hold-back announced in 1.0.17 was not in the binary. The test lived in the diagnostic enumerator, which runs only at detach; the function that writes the fourteen bytes never had it.
skip_exewas parsed, logged and echoed into the config, so a report showedskip_exe=1while the executable was patched on the first scan. It is now in the loop that patches. 1.0.17's notes described behaviour that could not occur. CfgReloadran on the render thread every frame when the bridge never delivered one — a file open, parse and close inside the lock the game's own threads contend for. It was throttled on a frame counter that stops when delivery stops. The throttle is on the clock now.- The game's own DLSS was suppressed on three frames into which nothing was written.
BridgeWillDeliveris answered before the frame runs;BridgeFailleftframe_readystanding until the third failure. It clears on the first now. - The rebuild pause could never escalate. Its counter was zeroed on every resume, so a shape that never settles rebuilt eight times every three seconds for the whole session, silently.
msaa_reportedwas cleared by the opposite condition, so a game alternating sample counts traded two messages forever.DLSS.Render.Subrect.Dimensionswere swept into 1.0.18's mirror-only rule. They describe the region this feature is asked to process, which this bridge knows exactly. Restored.
Changed
- NGX results are named, not printed as hex:
0xBAD0000B, UnableToInitializeFeature.
Notes
- Baldur's Gate 3 exports NGX from
bg3_dx11.exetoo. With the executable held back its calls still arrive through the driver's loader and everything works — the first evidence that holding it back costs nothing. - Three of these were one shape: a state reset at the wrong point of its own cycle.
- Verified on Baldur's Gate 3. The Elder Scrolls Online mitigation is still unverified there.
1.0.18
Fixed
- A parameter the game does not set was filled in with an invented default. Trails beyond the Horizon sets no
MV.Scale, and the-1.0supplied for it reversed every motion vector, so DLSS gathered its temporal history from the wrong side of the movement. That is the smeared ground and foliage. Seventeen per-frame parameters now mirror the game or stay unset. Aimed at Trails; not verified there. - A feature covering only part of its output texture was given the whole one. Gallipoli's map screen creates a 1440x1440 feature while its textures stay 2560x1440. NGX answers
0xBAD00005, and where it does not, DLSS writes 1440 columns of a 2560-wide texture and the rest stays stale — the two halves. The bridge stands aside for that shape and the game renders it. Aimed at Gallipoli; not verified there.
Changed
- The log names every parameter the game leaves unset.
- Only the create flags and the quality preset keep a fallback, because a feature cannot be created without them.
Notes
- Fourth defect from one mistake: create flags
107, quality presetMaxQuality,DoSharpeninginside that107, and nowMV.Scale. Each was Baldur's Gate 3's own answer, and one of them was its answer at one particular quality preset. - On the map screen and any similar sub-region, DLSS 5 does not apply. The alternative was a broken frame.
- Verified on Baldur's Gate 3, where both changes are inert.
1.0.17
Fixed
Correction. The hold-back described below was written into the diagnostic enumerator, which runs only at detach. The function that patches never had it, so on this version the host executable is still hooked on the first scan and
skip_exehas no effect. Fixed in 1.0.19.
- The game's own code section was patched when a game links the NGX client statically. The Elder Scrolls Online exports the entry points from
eso64.exe; it is the only reported title that dies with no exception, no shutdown marker, and a log that simply stops. The host executable is now held back and hooked only if nothing has called DLSS a minute later.skip_exe=0hooks it at once,2never. - The adapter and driver were recorded only when the D3D12 session opened, so a game that died before that left a report with no machine in it. Read from the game's own device at the first DLSS call now.
Added
- Windows named as 10 or 11, not only the build number.
- Adapter vendor, device and subsystem ids.
TdrDelay, the timeout a GPU reset is measured against.- Video memory used against budget, at session open and when a device is lost.
- What the driver reports about the formats handed to DLSS, with an alarm if the output format takes no typed UAV store.
- Two builds of one NGX snippet in a single process are called out. Escape from Tarkov runs
nvngx_dlss.dllat 310.7.129.0 beside a hand-placed 310.8.0.0. - The calling thread id on every create and evaluate.
- DRED explains the shape of the command list, so an operation can be attributed without counting. Shared textures carry names.
Notes
- Escape from Tarkov: the GPU reset happens inside NGX's own recorded work, on a resource barrier, with no page fault. Not this add-on's operation.
- Aimed at The Elder Scrolls Online; not verified there.
- Verified on Baldur's Gate 3.