github perseval-BLR/NeuralScreen v2.0.2
v2.0.2 - the fixes from the tracker

10 hours ago

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).

The fixes from the tracker, and one of them was a bug in a fix.

What was fixed

On an ordinary launch, the v2.0.0 fix never ran. The panel publishes its handle so the worker can reveal the picture under it instead of over it - but the worker was started before the panel existed, so it read that variable once, found nothing, and kept the answer forever. This is why a reporter's log still showed the old fallback line (window revealed on the first Present (on top - no usable panel handle)) on a build that was supposed to have fixed it. The panel is now built first.

The taskbar, the save dialog and our own windows were all read as "something covered us". Every 300 frames the worker checked whether anything had taken the topmost slot and raised the picture if so. It exempted two of our classes. The shell's taskbar is a topmost window too - so interacting with it lifted the picture over the panel, while the picture window is only raised and never put back until the next check. The same thing happened with our own Save As dialog, which holds the top for as long as it is open and produced the flicker a reporter filmed while taking a screenshot. Both sides now decide by process: the shell's windows and our own program's windows are not occlusion, and a real application window still lifts the picture, which is what this exists for.

A saved PNG carried a transparent hole where the panel was. Measured on the reporter's screenshot: alpha 255 over the desktop, alpha 0 over the whole panel rectangle - while the panel's own colours were in the file. The frame's fourth byte is "unused" as far as the renderer is concerned, and the PNG path was keeping it as the alpha channel (JPEG drops it, which is why it only showed in the default format). A capture is opaque by construction, so that byte is forced opaque now.

Changing monitor in window mode kept the old window target. A monitor switch tears the pipeline down and rebuilds it for the new monitor's size, but it never cleared the handle of the window being captured - only leaving window mode did. The program then held the stale handle, found it alive, and asked the worker to capture that window on top of a pipeline rebuilt for the whole monitor: two sources in one session. A monitor switch is a capture-source change and now clears it, with a line in the log saying so.

Two problems with HDR and the NR cascade, from a contributor. The HDR tone-mapping decision was following the presentation setting instead of the captured monitor's own HDR state, so the two could disagree. And the worker now waits for the GPU to finish before freeing a neural pass, refusing safely instead of releasing from under it - and releases the passes it is not using, which the reporter's log had been showing all along (asked=4 have=3 live=3, then down and never released).

Tests

Six new or repaired ones. Three cover this release's fixes directly (the panel's handle before the worker, an opaque screenshot, and the shell/own-window rule, which fails if either side stops asking whose window it is). Three are the taskbar test, which turned out to be passing two of its steps vacuously: it gave a foreign window the foreground with a call Windows refuses, so the steps never reached the bug they existed for, and its assertion blamed its own setup for a message the click path had correctly sent. It also had no negative coverage on one of its two message branches at all. Each repair is verified by mutation: five deliberate breaks, all caught.

Don't miss a new NeuralScreen release

NewReleases is sending notifications on new releases.