github perseval-BLR/NeuralScreen v1.14.0
v1.14.0 - sixteen post-release audit fixes

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

Fixes from the audit that followed v1.13.1, plus a revision of the test suite. Every entry closes a finding, and every one is covered by a test that fails on the tree before it.

Important

AMD Radeon build - an active call for testers. A separate repository, NeuralScreen-AMD - the same overlay with the neural pass aimed at RX 7000 / 9000 (RDNA3/RDNA4). It has not run on a real Radeon yet. Start with native/AMD.md, and if it does not come up, press Settings -> Program -> Create diagnostic package and attach that one file: log, card, driver, the stage it stopped at, paths already scrubbed.

The capture stops rebuilding itself on a high-colour display

The flicker reported on HDR displays has a measured cause. A v1.13.1 log (#89) shows the duplicated desktop alternating between FP16 and BGRA8 - 1955 times in 133 seconds, each change rebuilding the whole capture bridge, at grab 43.0ms against NR 18.3 fps. It stops completely once the format is pinned, at grab 3.0ms and NR 48.6 fps.

The legacy DuplicateOutput call does not pin the format, so the compositor picks per frame. A display that can produce a high-colour surface - HDR-capable, or a scan-out deeper than 8 bits - now asks for FP16 first through DuplicateOutput1, with BGRA8 kept as the fallback for a driver that refuses it. The capture shader already converts FP16 to SDR, so the picture is unchanged: HDR compatibility governs the presentation, not the capture format.

One detail decided the fix: the reporter's log line is output colour space 12, 8 bits per colour, so an HDR-capable display reports 8 bits and bit depth alone is not the trigger. An 8-bit display keeps the path it has always had.

A failed resize no longer answers "ok"

The resize handler called CreateVideoResources; on failure it logged, wrote a failure reply, and then fell straight through into CreateFeature and wrote a success reply four lines later - so the client believed a resize had been applied that never was. The half-built state is why that is a crash, not just a wrong answer: the call can fail after assigning the source texture, leaving the upload buffer null, and the upload path dereferences it unconditionally. The failure branch now logs, tells the client, releases what the attempt built, and stops.

The veil always comes down

Reported twice (#89, #96) as "the window is invisible". Switching modes dims the desktop behind a translucent curtain; if the worker died before its first frame, nothing cleared it and the curtain stayed up. The exit path now runs on every route out of the switch.

The menu, the keyboard, the drag, the list

Four ways the panel could fight the user: the keyboard stayed captured after the menu closed; dragging a slider and closing the menu left the drag alive, so the panel teleported when the menu reopened; an up-opening drop-down climbed into the title bar and hid its first rows there; a click on empty space could land on the wrong row. Text also overflowed its control in German and the CJK scripts, and the status line did not always name the card - the name was drawn first from the left edge and read the leftovers, which on a 4K panel left 74 px and in German 38 px, so it vanished.

The rest

  • a hand-edited config.json no longer aborts the launch - 26 hostile values are normalised or refused with the field's name;
  • the runtime is hashed once instead of on every guard call (184 ms -> 1 ms);
  • a transient worker failure still gets its one automatic revive;
  • the save dialog opens in an existing folder;
  • eleven strings are translated, one of them English in seven of eleven languages;
  • the manual revive (Num1) forgets the feature-18 verdict like every other restart path: a card that started working loses its red dot, one that came back broken loses the green one.

Tests

Full run: 166 checks, 163 PASS / 0 FAIL / 3 SKIP, GUI-E2E 9/9. The archive is byte-identical across rebuilds and ships the tagged default config.default.json.

A revision of the suite found checks that could not fail: four never ran (test_quality_gpu and test_spout_library printed SKIP every time), and the translation check missed a language-level regression - eighteen strings sat in English in one to nine languages while it reported success.

Don't miss a new NeuralScreen release

NewReleases is sending notifications on new releases.