Skip to content

Releases: BeliyG3/optimizer-fps-dlss5

Optimizer FPS for DLSS5 2026.10.2

Choose a tag to compare

@github-actions github-actions released this 11 Oct 20:32

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) or Classic (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) or Off.

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.5 NRHookPoint=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

Choose a tag to compare

@github-actions github-actions released this 04 Oct 21:01

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.dll or
    winmm.dll proxy, 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

Choose a tag to compare

@github-actions github-actions released this 04 Oct 10:06

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-guided ColorFilter=3). Where the frame was shrunk for the model
    (Uniform, the periphery in Peripheral, and the center band too below GlobalScale 100), 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, TemporalMode 0 uses the plain unpack (the log says "detail transfer
    declined"), while the temporal modes still use detail transfer.
  • SDK 0.7.0: ColorFilter::DetailTransfer and ColorFilter::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.
  • ColorFilter defaults to 2 (detail transfer) instead of 1 (soft). If you picked a filter yourself in an earlier
    release, your saved ColorFilter value 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
    ExecuteCommandLists once (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.dll or
    winmm.dll proxy, 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

Choose a tag to compare

@github-actions github-actions released this 26 Sep 19:16

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.exe in host64\
    in place of DLSS5-Feeder's host, and AIO's standalone-dlssnr.addon32 beside the game.
  • A status line in ReShade.log every 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=1 is 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 in NON_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

Choose a tag to compare

@github-actions github-actions released this 25 Sep 19:19

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, in host64\). 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. DebugWarpPath forces
    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
    (tested v0.2.0-patch1) and wilsjo2 OptiScaler-DLSSNR-PreSR-Multipass (tested v0.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 with warp_* keys in dlss5-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 .xy of 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 and pack_ps.dxbc go 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

Choose a tag to compare

@github-actions github-actions released this 20 Sep 20:11

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.

  • Verify threw instead of saying "unknown". When a release's VERSION.txt could 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

Choose a tag to compare

@github-actions github-actions released this 12 Sep 20:23

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 with 0xBAD00002 and 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 resources log 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.cpp from 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

Choose a tag to compare

@github-actions github-actions released this 10 Sep 19:22

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