Skip to content

v2.1.5 - the fixes from the tracker, and presentation on its own queue

Latest

Choose a tag to compare

@perseval-BLR perseval-BLR released this 25 Sep 18:34

Notice. Not affiliated with NVIDIA; NVIDIA, DLSS and the NVIDIA logo are NVIDIA Corporation's trademarks. The bundled NVIDIA runtimes are NVIDIA's property, included unmodified as received, research/educational use only, no warranty, use at your own risk.

Warning

NeuralScreen requires the latest NVIDIA driver. Operation with older drivers or unsupported/non-standard configurations is not guaranteed.

Important

Radeon testers wanted. The AMD build lives in a separate repository, NeuralScreen-AMD, and it has not run on a real Radeon yet. Start from native/AMD.md there, and if it does not come up, attach the diagnostic package (Settings -> Program -> Create diagnostic package).

A patch on the v2.1 line: the fixes from the tracker (#128, #129, #130), plus the frame generation work of PR #127, which ships here for the first time.

A capture pause now really resets NR and FG (#130)

The stall detector cleared its own flag on the first fresh frame, three hundred lines above the one place that reads it - so the reset it announced never happened. NR kept its temporal accumulation and FG kept its interpolation slots pointed at a picture that no longer existed, while the log printed capture resumed ... history reset on every pause. That is the jerk a window drag showed. The flag now survives until the consumer clears it, and the resume line lives with the reset it describes.

A reopened capture never shows its empty first frame (#128)

The first AcquireNextFrame of a fresh Desktop Duplication session publishes an empty surface - the desktop has not been composited into it yet. Swizzling it overwrote the last good frame in v.color with black, and that black is what a screenshot taken right after NR OFF woke the capture was made of. The empty frame is consumed instead, the previous picture stays, and the consumer is told there is no colour yet. Desktop Duplication only: a WGC frame pool carries frames the window has already produced, and discarding one would starve a static window.

Moving off a monitor that is gone (#128)

When the captured monitor disappeared - unplugged, a dock removed, switched off in Windows - the program noticed, rebuilt twice and then kept running against a display DXGI no longer exposes, while the worker refused the output on every reopen (NS_OUTPUT is not an output of this adapter). It now moves to a live monitor through the same switch a user's choice takes, by devicename rather than index (so it works when output 0 is the one that left), debounced like a size change, with one line per absence.

DRED breadcrumbs can be switched off (#129)

They are on by default since 2.1.4, and Microsoft measures 2-5% on a typical engine for them. NS_DRED=0 turns them off, following the NS_ARCH_SPOOF convention. The log says which state it is in either way, so the switch cannot pass for a failure.

Frames go to the screen on their own queue (PR #127)

With FG 2x and NR on, every real frame waited about 13 ms before it could be shown: the overlay's swap chain shares its GPU queue with the network, and the real frame came due halfway through the next NR pass, so it waited for that pass to finish. Two frames reached the screen close together, then a long gap - a stutter while [fg] displayed still read a clean 2x. Presentation now has its own queue, which is the only place the wait can be removed: Present is itself an operation on the swap chain's queue, so a frame copied earlier would still be shown behind the NR work queued in front of it. In the same test the waits drop under 1 ms, nothing is dropped, and the source rate with FG on goes up 5-19%. Thanks to x-nihil0 for the measurement and the fix.

Tests

Full suite on the release state: 228 checks, 0 FAIL, 5 SKIP, GUI-E2E clean. New or extended, each failing on the code before it: test_worker_zorder_and_safety (checks 16 and 17), test_monitor_resize (three cases), test_dred_diag (the NS_DRED=0 switch).