v1.2.0
The driver's optical flow engine now works on Vulkan, which the previous release
said it never would. That claim was wrong, and this release is mostly the story of
why.
Hardware motion vectors on Vulkan
A game with no DLSS of its own, on Vulkan, can now be given a DLSS contract whose
motion vectors come from the NVIDIA driver — with no ReShade motion-vector shader
installed at all.
- The engine creates its own two textures on a private D3D11 device and opens
them on the private D3D12 one. It used to try the opposite:ID3D11Texture2D
aliases of the shared D3D12 textures the transport already creates, through
ID3D11Device1::OpenSharedResource1. That call is refused withE_INVALIDARGon
the driver this was developed on — and always has been. The same refusal is in
every D3D11 session log ever produced by this add-on: the mirror's
MakeSharedPairtries that direction first, is refused for every texture and
every format, and succeeds only by creating on D3D11 and opening on D3D12. - Nothing forced the failing direction. 1.1.0 documented, as a hard limit, that
the engine's textures had to be D3D12-created because the game's Vulkan device
imports them. That is true of the transport's four textures and false of the
engine's two, which are imported into nothing. The sentence was the limit. - Each frame's colour is copied into the engine's texture on the D3D12 side under a
CPU fence wait; NGX is handed the engine's motion-vector texture directly, with no
copy back.
Arming no longer needs a ReShade shader
The gate wanted motion vectors before it would build the transport, and the engine
that supplies them opens inside the transport. A machine with no motion-vector
shader installed therefore never armed, and the engine never got a first chance —
one had to be enabled once purely to open the door. The gate now accepts a session
on the expectation of the engine: the first frames build the transport and open it,
deliver nothing, and the vectors are real from the next one. If the engine then
refuses to open, the transport stands down rather than evaluating over an unwritten
texture.
Fixed
- The delivery gate refused every frame after the one that opened the engine.
It tested the motion-vector binding for a null resource, and the branch that
selects the engine leaves that null on purpose. The engine's branch had shipped
without ever executing. - An add-on unloaded while a frame was parked could hang the game: the worker's stop
path left the loop without setting the release event, and shutdown signalled the
events before stopping the worker rather than after. - A stalled queue retired the Vulkan mirror for the rest of the session. A stall is
now skipped and counted, and the mirror records nothing further until the queue is
observed to reach the stalled frame's own copies-done event. - The render thread's guard on the previous frame's park was shorter than the
worker's own budget, so one slow but successful evaluate stood the mirror down
permanently. - The status panel read the D3D11 optical flow session on a Vulkan runtime, so it
reported an engine that would open on the first frame over one that had already
tried and failed; and it reported no cost at all while the log printed one, because
it took the timer frequency from a field only the D3D11 path fills. - The panel reported no session for a working Vulkan mirror, and printed the render
size where the output size belonged. - A superseded synthetic session forced a second feature build, and a mirror rebuild
left the optical-flow engine's aliases on released textures. - A refusal told users the creation flags of a texture that had never been created,
beating the true message one line below it: with no motion-vector shader enabled
the panel now says so plainly. - Log lines corrected where they stated more than was established, including one
that named the game's own D3D11 device for a session opened on a private one.
Changed
- The add-on is
dlss5-bridge.addon64. Delete the olddlss5-dx11-bridge.addon64
— ReShade loads every add-on it finds, and two copies hook the same NGX entry
points over each other. The log says so if it happens; it cannot prevent it. The
old.cfgis read as-is, so settings carry over with nothing to do. - The source latch is released on D3D11 as well as Vulkan, so a game whose own DLSS
is switched off mid-session falls back to the synthetic contract instead of
delivering nothing until restarted. - Optical flow frame costs are no longer quoted. The figures from a standalone
harness and the one the add-on's own log reports measure different things and have
never been reconciled; the status panel reports the live cost for the session in
front of you.
Tested on
- Baldur's Gate 3, Vulkan: the mirror over the game's own DLSS, and the synthetic
contract with the driver's optical flow engine and no motion-vector shader
installed. The engine opens on its own, the conversion self-check reports zero
disagreement over 24000 sampled cells, and frames are delivered continuously. - Skyrim Special Edition, D3D11: the synthetic contract and the optical flow
engine over extended play. - Image quality was not assessed on either.