Repository navigation
Releases: BeliyG3/optimizer-fps-dlss5
Release list
Optimizer FPS for DLSS5 2026.10.2
With a temporal mode, swaying trees and grass keep more of their NR look between the model's runs, also while the
camera moves. This release also fixes stutter and lagging surroundings during camera turns with two model passes
spread over frames (ModelPasses=2 with SpreadPasses on, the default), pale shapes on the sky during fast turns,
and the background mode behind renodx 8.5 and the ShortFuse build.
Changed
- Less smearing and flicker on foliage while the camera moves (temporal modes). Carried frames now follow a motion
chain of their own that ignores scattered colour flicker. In a moving garden this gains 0.2–0.3 dB between model
runs and loses nothing elsewhere; it costs 0.15 ms per frame at 4K. The new setting is Carry chain
(TemporalChainRule, Temporal group):Coherent(the default) orClassic(restores the old behaviour exactly).
Coherent uses about 16 MB of video memory with 1080p motion vectors (about 66 MB at 4K). After you switch to
Classic, that memory is freed only when the temporal mode's resources are created again (for example, after a
resolution change or a game restart). - Foliage shimmers much less between model runs (temporal modes). On each run, the add-on tells the model which
pixels have no usable history, so the model does not smear an old picture into an area a moving object just
uncovered. Until now, every pixel whose colour had changed counted. Leaves moving in the wind change colour almost
everywhere, so whole trees started from scratch on every run and visibly pulsed. The new default rule marks a pixel
only where the depth also shows a different surface, and only in connected patches. Foliage keeps most of its
history, and people and objects walking past walls are handled about as well as before (within 0.17 dB). In our
test scene (a windy garden, the model every 8th frame), foliage on the model's frames comes 5.9 dB closer to running
the model on every frame with the camera held still, 0.86 dB closer in a slow pan and 1.23 dB closer along a walk.
The frames in between improve too, and a model run costs no more at 4K. One forward walk with the model every 4th
frame scores 0.22 dB lower than before. The new setting is Model motion markers (TemporalModelMarker, Temporal
group):Narrow(the default),Classic(restores the old rule exactly) orOff.
Fixed
- Spread passes cost about as much as passes in one frame again (temporal modes). Spreading the passes copied the
game's frame every frame through the full reprojection pass instead of a plain copy, and that pass gets more
expensive the faster the camera moves. In a 4K test (Global scale 50, the model every third frame), spread passes
cost 7.5 ms per frame more than both passes in one frame during a fast turn, and 5.3 ms more during a slow one. Now
the difference is about 2 ms. During a fast turn the test went from 21.6 to 25.0 fps (25.9 with both passes in one
frame). The image is unchanged. - NR's own history now follows the add-on's. When the add-on restarted its motion chain (after switching spread
passes or the temporal mode, a failed frame, or the background mode rebuilding its job), NR kept a history from an
older frame but got motion to the newer one. For a few frames its picture drifted (a brightness shift and dark halos
around lamps in our test scene). Each NR feature now resets its history exactly when the motion it gets does not
reach back to the frame it last ran on, and only then. In steady play nothing resets. - No more pale silhouettes on the sky during fast camera turns (temporal modes). The frames between the model's
runs could paint pale, blotchy shapes onto a flat sky where buildings had stood a moment earlier (seen in Assassin's
Creed with two model passes and the model every 8th frame). Those frames took the model's edit of each sky pixel
from wherever its motion said it came from, and motion on a featureless sky is unreliable. Now they give the sky
(the pixels exactly at the far plane of the game's depth buffer) a smooth estimate of the model's sky edit, so the
sky stays free of patches. Its tone can lag the model's a little until the next model run, which shows the model's
own sky. When the camera suddenly shows much more sky than the last run saw (leaving a building, a doorway
opening), that run's few sky pixels cannot stand in for the new sky. Until the next run, those frames treat the sky
as before while the run saw less than about a third of the sky now on screen, and blend in the smooth estimate as
that share grows to 60 %. The new setting is Smooth sky in carried frames (TemporalSkyField, Temporal group),
on by default. With it off, the image is exactly as before. Switch it off in a game that hands over linear depth
instead of the usual 0-to-1 depth. - Temporal modes in games with dynamic resolution. The frames between the model's runs check each pixel against
the depth saved at the model's last run and at the previous frame. They read that saved depth as if it had the
current frame's resolution. When the game changed its render resolution in between, they looked at the wrong spots,
so the model's edit could be dropped or carried onto the wrong surface until the next run. In the background mode,
the same wrong spots were also used to blend each new result with the previous one and to check the motion handed
to the model (also after a dropped result). Saved depth is now read at the resolution it was saved at. With a fixed
resolution the image is exactly as before. - renodx 8.5 and the ShortFuse build (26.1003). These renodx versions hand the add-on ReShade's own copy of the
game's command list, whose device is not the one ReShade registered the game's queue under. The background mode
(TemporalMode=3) therefore switched itself off ("no registered host queue") and the synchronous mode ran instead.
The add-on now recognises the game's queue through the shared graphics adapter, and the background mode runs again.
With NR at the present (renodx 8.5NRHookPoint=2, the ShortFuse build's hook stage 3), renodx submits its work
where no ReShade event sees it. The add-on's descriptor tables were then freed only 16 frames later and ran out
every 18 to 24 frames: those frames showed the game's image without NR and stalled for up to 100 ms ("descriptor
pool exhausted"). The table pool is now large enough for that delay, and each frame's tables are held exactly 16
frames after their own use (before, a frame's tables could be reused one or two frames after it).
Limits
- Spread passes still run the model on two consecutive frames, and the motion chain for the first pass still costs
about 2 ms per frame.
Optimizer-FPS-for-DLSS5-2026.10.2.zip SHA-256: 26db52cf4f18db794c5df300f75d9459ed84e03598876fa2724f0777b46c2b3f
Unzip, run Install-OptimizerFPS.cmd "<path to the game .exe>", start the game, then Verify-OptimizerFPS.ps1 to confirm. See README.txt in the zip.
Optimizer FPS for DLSS5 2026.10.1
Carried frames in Interpolate (sync) are cheaper, with a byte-identical image. With a compressed model, carried frames
in both Interpolate modes can also be reprojected at the model's resolution (a new checkbox, on by default). This
changes carried frames where it applies, and only there.
Added
- Carry at the model's resolution (
TemporalGrid, a checkbox in the Temporal group, on by default). When Uniform
or Peripheral gives the model about 80% of the native resolution or less on both axes (for example, Peripheral with
Global scale below 80%), carried frames are reprojected on a coarser grid matched to the model's resolution instead
of on every native pixel. This works in Interpolate (sync) and in the background mode. The model's edit never has
more detail than that grid, so each carried frame costs less GPU time. The frame itself stays at native resolution,
and frames where the model runs are unchanged. Carried frames can look slightly softer at moving edges. Mode Off and
a model above about 80% are never affected. With the checkbox off, or wherever the grid does not apply, the output
is byte-identical to 2026.10.
Changed
- Carried frames cost less GPU time, with a byte-identical image. The smoothing step is skipped on pixels where it
has no effect (where the model's edit was accepted), and one redundant full-resolution write per carried frame is
gone. This saving never changes a pixel; the checkbox above is the only change to the image.
On the 4K bench (Peripheral, Global scale 50, the model every third frame), the byte-identical saving cut a carried
frame from 5.2 ms to 3.1 ms. In a second bench session, the checkbox cut it from 2.7 ms to 1.5 ms. Checked in
Baldur's Gate 3.
Limits
- OptiScaler's own menu shows Carry at the model's resolution as unavailable: with OptiScaler's model
resolution, carried frames are always reprojected at native resolution.
Known issues
- 007 First Light: since the game's Steam patch of October 1, 2026, it crashes or hangs with any
dxgi.dllor
winmm.dllproxy, including plain ReShade without this add-on
(DLSS5-Swapper issue #413). The add-on does not cause
it, but it cannot run there until the game or the loaders fix it.
Optimizer-FPS-for-DLSS5-2026.10.1.zip SHA-256: 6e0486bba0359427dbcbe2b2a15ff08f8799ae87becd08200f5815b36506d8f3
Unzip, run Install-OptimizerFPS.cmd "<path to the game .exe>", start the game, then Verify-OptimizerFPS.ps1 to confirm. See README.txt in the zip.
Optimizer FPS for DLSS5 2026.10
Three changes. Menu mode runs Neural Rendering in the menus of games that switch it off there. Detail transfer is
on by default: the color filter in the tab is now a "Detail transfer" checkbox (on) with "by depth" under it (off),
and unticking it brings back the Bilinear / Auto choice. And the add-on uses much less video memory, with the image
unchanged.
Added
- Menu mode (
MenuMode, a checkbox under Mode, off by default). When the game stops calling Neural Rendering
(a pause menu, a map, a workbench), the add-on runs the NR model on the menu frame itself, so the background keeps
the NR look. It starts 150 ms after the game's last NR frame and ends at the next one, which restarts NR's history.
It works with Mode Off, Uniform and Peripheral, in native D3D12 games and in D3D11 games whose NR runs through a
D3D11-to-D3D12 bridge. It works in Star Wars Jedi: Fallen Order (OptiScaler's D3D11 path, Luma's scRGB HDR) and on
our test benches (D3D12, and D3D11 with dlss5-dx11-bridge); the menus of Baldur's Gate 3 are not checked yet. A
line under the checkbox says whether it is waiting, running, or why it cannot run here. - Menu mode follows your temporal setting. With Interpolate (sync) the model runs every N-th menu frame, and the
frames in between carry its edit, moved by NVIDIA's optical flow (menus have no game motion). Uniform and
Peripheral compress the menu frame like a game frame. This works on D3D12 and on D3D11 through a bridge. On the
bench the sync cadence costs about half the GPU time of running the model every frame. - Detail transfer (
ColorFilter=2, depth-guidedColorFilter=3). Where the frame was shrunk for the model
(Uniform, the periphery in Peripheral, and the center band too belowGlobalScale100), the frame is rebuilt from
the full-size color plus the model's upscaled edit, so textures and edges keep full resolution. The depth-guided
variant weights the upscale by depth, so it favors the pixel's own object and fades a mismatched neighbor's
contribution. Compute path only. It behaves the same with every NR host except one that writes the model's result
back into its own color texture: there,TemporalMode0 uses the plain unpack (the log says "detail transfer
declined"), while the temporal modes still use detail transfer. - SDK 0.7.0:
ColorFilter::DetailTransferandColorFilter::DetailTransferDepth. - Bench diagnostics
DebugMenuPass,DebugMenuDump,DebugMenuEntryMs,DebugMenuOwnBlock,DebugMenuNoFlow,
DebugMenuBridgeCanary(read-only keys).
Changed
- The add-on uses much less video memory, with the image unchanged (byte-identical frames on the benches). At 4K
with the default settings, its cost drops from about 912 MiB to about 358 MiB. Other setups save more: about
670 MiB with Interpolate (sync), about 710 MiB on the pixel path, and about 1175 MiB with two model passes spread
over frames. Textures for features you have switched off are no longer created. Checked in Fallen Order and
Baldur's Gate 3. ColorFilterdefaults to 2 (detail transfer) instead of 1 (soft). If you picked a filter yourself in an earlier
release, your savedColorFiltervalue is kept: tick Detail transfer in the tab to switch it on.- Switching the temporal mode now rebuilds the add-on's textures once, which causes a short hitch at the moment of the
switch.
Fixed
- Menu mode stayed at "unavailable: waiting for the host's NR queue" for good when NR runs on a D3D12 device that
ReShade never wraps (OptiScaler's own device in D3D11 games, such as Fallen Order), because ReShade never reports
that queue. After 8 menu-mode presents without a report, the add-on now hooks the D3D12 runtime's
ExecuteCommandListsonce (a queue vtable entry; the add-on then stays loaded for the session) and observes the
host's NR lists itself. It writes one log line when hooked and one for each new queue it hands to the core. This
happens only while MenuMode is on, and it is what makes menu mode work in Fallen Order. - The core's optical flow session could let the first frame after the session started use its flow textures before
NVIDIA had finished registering them (a rare corruption risk on the first optical-flow frame, in games and in
menus). Fences now enforce the order, on the game's queues of the same GPU only.
Limits
- The background temporal mode (3) is not used in menus. With Mode Off the model runs on every menu frame; with
Uniform or Peripheral, menu mode says so and is unavailable. - Without optical flow (no optical flow engine, or it fails in a menu), nothing is carried: Mode Off runs the model
on every menu frame, and Uniform and Peripheral show "unavailable: optical flow is not available". - The first menu of a game session can hitch once (about 60 ms) while the optical flow session is created.
- Menus have no motion vectors, so a moving menu background may smear.
- The first few frames after leaving a menu can look soft, because NR's history is reset (up to about 7 dB on the
bench in the first frames with a temporal mode, and more in Uniform). - Supported swap chains are SDR and scRGB (FP16, such as Luma's HDR in Fallen Order). scRGB goes to NR as it is, so
the menu tone may differ from the game's NR frames. With HDR10, the tab says so, and menu mode retries when the
game switches back. - A setting changed inside a menu takes effect from the game's next frame.
- If you turn menu mode on while a menu is already open, it starts with the next menu.
- A GPU that needs more than 100 ms per menu frame can drop a few of the game's NR frames right after a menu closes
(they wait for the last menu frame); menu mode stays on. - Menu mode works with one swap chain at a time: in a game with a second swap chain (a launcher or video window), it
stays on the first one it is used for until that one is closed. - OptiScaler's own menu shows the checkbox as unavailable.
Known issues
- 007 First Light: since the game's Steam patch of October 1, 2026, it crashes or hangs with any
dxgi.dllor
winmm.dllproxy, including plain ReShade without this add-on
(DLSS5-Swapper issue #413). The add-on does not cause
it, but it cannot run there until the game or the loaders fix it.
Optimizer-FPS-for-DLSS5-2026.10.zip SHA-256: 03626af98e5e356e36f319cb4d5377376e26fed17ea073a577791a3da63eea87
Unzip, run Install-OptimizerFPS.cmd "<path to the game .exe>", start the game, then Verify-OptimizerFPS.ps1 to confirm. See README.txt in the zip.
Optimizer FPS for DLSS5 2026.9.2
Works with DLSS5-Reshade-AIO, which runs Neural Rendering on an asynchronous compute queue. The idea
and a first implementation came from cobaltmods (GitHub pull request #6). Tested with AIO 2.2.4 in
Divinity: Original Sin 2 (64-bit) and Batman: Arkham City (32-bit).
Added
- A consumer's COMPUTE command list. DLSS5-Reshade-AIO evaluates the model on a compute list;
the add-on used to pass such frames through untouched ("DIRECT required"). The compression now
records on that list through the compute path; the pixel path, which draws, is never used there.
If the list type changes under a running model, the compression is rebuilt on the right path. On
the bench (bench12 --nr-list compute) the frames are bit-identical to the same run on a direct
list, with and without the temporal mode. - Compute queues are registered alongside the graphics queues, so the GPU wait before anything
is released also covers a consumer's compute queue. - Installer and Verify accept AIO's 32-bit layout:
AIO DLSS5 32-bit Wrapper.exeinhost64\
in place of DLSS5-Feeder's host, and AIO'sstandalone-dlssnr.addon32beside the game. - A status line in
ReShade.logevery 30 s while a model is hooked: the state (ACTIVE, NOT ACTIVE
or SAFE MODE), how many frames went through the add-on and how many were shown as plain colour,
and why the last frame was not warped.
Changed
- In AIO's 32-bit wrapper the crash guard is off unless
CrashGuard=1is set: AIO ends that process
from outside on every "apply settings", which a marker cannot tell from a crash. - Background mode runs as the synchronous mode when the consumer evaluates on a compute list.
Fixed
- Device removed when the colour and output formats differ. The temporal mode's colour snapshot
keeps the format of what it was taken from (the game's colour, or the unpacked frame in the output's
format), but the next frame read it through that frame's colour format. With DLSS5-Reshade-AIO in
Divinity: Original Sin 2 (colour R10G10B10A2, output RGBA8) that view was invalid and the GPU
removed the device at once. The snapshot now keeps its own view format. The bench covers it with
--nr-proxy-format r10g10b10a2. - The temporal mode's accumulated motion rested in
ALL_SHADER_RESOURCE, a state that a compute
list cannot use; on such a list the frame's commands were rejected and the device hung. It now
rests inNON_PIXEL_SHADER_RESOURCE, and the pixel path moves it to the pixel state and back
itself. - The 32-bit tab logged "x86 ReShade.ini section scan failed" in Batman: Arkham City, where the
game process cannot open ReShade.ini directly. The tab now reads its settings through ReShade.
Optimizer-FPS-for-DLSS5-2026.9.2.zip SHA-256: 6775e84e3fad1575b98264b26afaa9b2d9442d2522e283a8a42b668fa1597db7
Unzip, run Install-OptimizerFPS.cmd "<path to the game .exe>", start the game, then Verify-OptimizerFPS.ps1 to confirm. See README.txt in the zip.
Optimizer FPS for DLSS5 2026.9.1
One core for everything the add-on does, and the add-on now works on top of public OptiScaler builds.
Changed
- One core DLL. Compression, frame carry and diagnostics live in
optimizer-fps-dlss5-core.dll,
installed beside the add-on (for 32-bit games, inhost64\). The add-on loads it; there is one core
per process, and its release and ABI are checked at load. Keep the add-on, core, forwarder and
shaders from the same release. - Compute compression by default. Pack/Unpack run as compute passes when the GPU supports typed UAV
stores for the formats involved; otherwise they use the previous pixel path.DebugWarpPathforces
either one for diagnostics. - Settings section
[OptimizerFPS]. An existing[PeripheralWarp]section is copied once when no
new section exists; the installer's Update removes the old one after a backup. The tab is drawn
from the core's settings list, with collapsible groups. - Installer and Verify know the core DLL: they install, hash and verify it, keep a Schema 3
receipt, and check that the add-on and the core come from the same release.
Added
- Public OptiScaler builds with Neural Rendering as an NR consumer: Dagherbou OptiScaler_DLSSNR
(testedv0.2.0-patch1) and wilsjo2 OptiScaler-DLSSNR-PreSR-Multipass (testedv0.8.3,v0.8.91)
with[Plugins] LoadReshade=true. The add-on takes over the model OptiScaler created and compresses
it on D3D12, and on D3D11 through OptiScaler's bridge, including NR before the upscaler and
OptiScaler's own frame generation. See docs/INSTALL.md, "With a public OptiScaler". - Settings beside OptiScaler's menu. With a public OptiScaler in the process, its menu key
([Menu] ShortcutKey, Insert by default) also opens a window with the add-on's settings beside
OptiScaler's menu, so they can be changed without opening ReShade. The tab warns when
OptiScaler's own peripheral compression (SpatialCompression) or extra model passes are on.
Tab layout
- The four compression groups sit under one collapsible Compression header; Mode stays on top.
- Diagnostics, the core's status lines and the diagnostic counters are behind an Advanced
(diagnostics) checkbox (ShowAdvanced, off by default). - Status lines no longer move the controls below them: text that changes with the state stays on one
line (the full text is in the tooltip), the hook-attempt count is part of the banner, and a group
with nothing to show on the host has no header. The add-on's description in ReShade's list is one
line.
Fixed
- The status banner flickered in a temporal mode. It switched between ACTIVE and NOT ACTIVE every
frame because a frame carried without a model pass counted as not warped. It now keeps the state of
the last model frame. - 32-bit games stuck with the add-on switched off. In the 32-bit kits the model runs in a helper
process,host64\dlss5-feed-host64.exe, which the game stops and restarts whenever settings are
applied in its tab. A stop within 20 s of the first compressed frame looked exactly like a crash, so
the crash guard switched the add-on off, and it stayed off: a host never unloads cleanly, so nothing
removed the marker. When the game stops a host (settings applied, a restart, the game's exit), the
host ends with exit code 0, whether it leaves by itself (the 31.08 Feed) or the game kills it (the
optical-flow Feed). A crash ends with an exception code, and a removed device with 3.
The game's 32-bit tab now watches the hosts its game starts and removes the marker of any host that
ended with 0. At the game's exit, ReShade unloads the tab seconds before the Feed stops the host, so
the tab signals on its way out and the host's add-on removes the marker itself. The host's add-on
also does this when the host leaves by itself with 0. A removed device is noted in the marker, and
that marker stays. - The 32-bit tab hid the crash guard. With the guard tripped, it said "waiting for the host to
create feature 18" and had no Retry. It now shows the guard in red with a Retry button that reaches
the host. With an older host add-on, the tab shows a line naming the file to delete instead. - The 32-bit tab no longer says that feed32 does the compression: in the current kits it runs in the
64-bit host, and feed32 compresses as well only in a kit withwarp_*keys indlss5-feed.cfg. - Motion vectors in an RGBA16F or RGBA32F texture (Cyberpunk 2077 with Ray Reconstruction, GitHub
issues #2 and #3) stopped the compression with "pack descriptors: UnsupportedFormat". Vectors are now
read from.xyof these formats, as they already were from RG16F/RG32F. - An output texture larger than the frame. A host that hands the model a larger output texture
(alignment padding, a maximum-size render target) with the frame at its top-left was left
uncompressed with "host output is AxB, feature is CxD". The compressed frame is now copied into that
region. Hosts whose frame does not fit the model at all (a model that upscales, a colour region that
changes with dynamic resolution, an output region elsewhere in its texture) are recognised before
the layout is applied. The model then runs untouched and is no longer re-created twice on every
slider change. The tab and the log say which of these cases it is (GitHub issue #4). - The spread schedule of the model passes no longer runs when the host's output region differs from
the feature: it used to write past the region and record an invalid whole-texture copy. - Pack read outside the colour region (SDK,
peripheral_warp_pack.hlsli). The periphery filter's
taps are now kept inside the host's colour region. When the region sits inside a larger texture, the
taps at the right and bottom edges used to blend in whatever the host kept past the region; with
the model on top, that changed the whole frame slightly (bench, Uniform: MAD 0.25). A region that
fills its texture gives bit-identical output to before. The add-on andpack_ps.dxbcgo together.
Known limits
- Background mode runs as the synchronous one when OptiScaler loads ReShade (the game's queue is not
visible to ReShade). - An OptiScaler build with its own peripheral compression (wilsjo2
SpatialCompression) and this
add-on must not both compress: turn one off. - Unloading the add-on while the game runs is not supported; change it with the game closed.
Optimizer-FPS-for-DLSS5-2026.9.1.zip SHA-256: acf67f6f46509c05772cd9f2a0ff4ba9a5d672290c1356ace92db9351d3aad44
Unzip, run Install-OptimizerFPS.cmd "<path to the game .exe>", start the game, then Verify-OptimizerFPS.ps1 to confirm. See README.txt in the zip.
Optimizer FPS for DLSS5 2026.9
2026-09-20 - the carry no longer depends on the depth convention, and the 32-bit tab gained the model passes.
The release number changed shape. Up to 26.29 it was the number of the work stage the build came
out of; "26" never meant anything and never moved. From this release it is the year and month, and a
second release inside one month adds a third component (2026.9.1). The SDK keeps its own semantic
version (PW_SDK_VERSION), which is unrelated.
Fixed
-
Depth of any convention. The carry used a negative value as a marker for "this surface was not in
the residual's frame", which is a real depth in a game that hands out linear view-space Z (007 First
Light: -2.3 to -84). There the test rejected the model's contribution over the whole frame. The marker
is a quiet NaN now, and "the expectation is off" travels in its own channel. On the bench, with the
depth written as negative linear Z, acceptance is 93.8 % - the same as with reverse-Z. -
Three defects in the history of the two previous passes. The depth was read at a different place
than the link it belonged to; neighbouring links were averaged into a displacement that pointed at
neither surface; a NaN displacement quietly became zero, which reads as "did not move". -
The history pass was handed a stand-in where it asked for the depth. Storing a pass began to
read this frame's depth, but the pass's list of inputs was not extended to match, and the machine
blanks every input a pass does not declare - so the link between two stored passes recorded the
residual's red channel as its source depth. The manifest now declares it, and a test compares the
declared inputs against the compiled shaders, which is what caught this. -
Guides read past the edge of their sub-rect. The carry reaches outside the frame as a matter of
course - the end of a motion chain, a ring tap around a rejected pixel - and those reads were not
held inside the host's sub-rect. Past the edge of a texture a read returns zeros, and a zero depth
is a real sample (the camera plane in a 0..1 buffer, infinity in a reversed one), so along a band at
the frame's edge the tests either accepted a surface that was not there or threw away the pixel's
own. Where a host keeps its guides in part of a larger texture, the same read reached into the
neighbouring region instead. Every guide read and the bilinear chain fetch now clamp to the rect,
as the packing shaders already did. -
Verifythrew instead of saying "unknown". When a release'sVERSION.txtcould not be read -
locked by another process, say - the verifier called a method on nothing and stopped. It now reports
the version as unknown, as the installer already did, and the installer's test suite covers what the
receipt records for a payload with, without and with a byte-order-marked version file.
Added
- Model passes in the remote tab. 32-bit games show the tab of the 64-bit host; it now carries
Model passes,Spread passes over frames, the running count and the host's reasons, including
why a temporal mode is not the one that was asked for. The shared block is protocol 3 and its
section carries the version in its name, so a host and a tab of different ages no longer meet on
the same memory - update both halves of a 32-bit install together.
Changed
- The temporal passes ship as compute shaders (
temporal_<Name>_cs.dxbc, fifteen of them); the
pixel-shader set is gone and the installer removes it.
Optimizer-FPS-for-DLSS5-2026.9.zip SHA-256: dcddc740ae73db517a6b1505525f48802dc20cca9c9bca6ea5f7bdb8cb368130
Unzip, run Install-OptimizerFPS.cmd "<path to the game .exe>", start the game, then Verify-OptimizerFPS.ps1 to confirm. See README.txt in the zip.
Optimizer FPS for DLSS5 26.27
2026-09-13 — compatibility hotfix for renodx-dlss5 5.2.1.
Fixed
- renodx-dlss5 5.2.1 (2026-09-11) creates the Neural Rendering model at the render resolution first,
commits the working resolution after a settle period and re-creates the model with worksets while the
previous one is still alive. Models that belong to another consumer ("foreign" feature-18 instances)
were passed to the original NGX entry points; the second creation failed with0xBAD00002and the
consumer fell back to "install a Neural Rendering Consumer". Foreign models now go through the
add-on's own forwarder, like the models the add-on manages itself. Verified on the bench with
renodx-dlss5 4.55, 4.70 and 5.2.1. - A per-frame
host resourceslog line: the input signature was compared before it was cleared.
Bench (tools�ench, not shipped)
--dlaa(render size = output size, guides at native resolution),--fps-jitter MS,--fullscreen;
the bench warns instead of exiting when the add-on is not loaded; a broken string literal that kept
pw_bench.cppfrom compiling is fixed.
No behaviour change for games where it already worked; settings, files and the installer are the same as 26.26.
Optimizer-FPS-for-DLSS5-26.27.zip SHA-256: 6f638c9474774c2a70eb042b8660fe5ceea0a1565e4230f1ea08d8ec2e71e2f7
Unzip, run Install-OptimizerFPS.cmd "<path to the game .exe>", start the game, then Verify-OptimizerFPS.ps1 to confirm. See README.txt in the zip.
Optimizer FPS for DLSS5 26.26
2026-09-10 — first public release.
Optimizer FPS for DLSS5 is a ReShade add-on that reduces the GPU cost of DLSS 5 Neural Rendering:
the screen periphery is compressed before the model runs and unpacked afterwards (the model processes
81 % of the pixels at 3840×2160 with the default 80/90 layout), and the model can run only every Nth
frame, with the frames in between reprojected along the game's motion vectors, either synchronously
or on a background GPU queue.
In the zip: Install-OptimizerFPS.cmd (drag the game's .exe onto it), Verify-OptimizerFPS.ps1,
README.txt, and the payload: optimizer-fps-dlss5.addon64, the NGX forwarder nvngx.dll_optimizerfps.dll,
10 compiled shaders in optimizer-fps-dlss5\, and optimizer-fps-dlss5-remote.addon32 for 32-bit games.
Needs: Windows 10/11 64-bit, an NVIDIA RTX GPU (developed on an RTX 4080 SUPER), ReShade 6.8+ with
add-on support, nvngx_dlssnr.dll 310.8, and a working Neural Rendering consumer (renodx-dlss5,
DLSS5-Feeder's host64, or the OptiScaler DLSSNR fork). Do not use it in games with anti-cheat.
Settings live in the [PeripheralWarp] section of ReShade.ini (the section keeps the project's
historical internal name).
Optimizer-FPS-for-DLSS5-26.26.zip SHA-256: ad7ef3262547b9b25a8c04ca3ce385c500fe86c84a7b47f1d12f1b8479cb71de
Unzip, run Install-OptimizerFPS.cmd "<path to the game .exe>", start the game, then Verify-OptimizerFPS.ps1 to confirm. See README.txt in the zip.
Demo video: https://youtu.be/VZTYIaRnkpI