github Echo-Storm/ls-addon-manager v0.9.24
Addon Manager for Lossless Scaling 0.9.24: pacing tools, a card that backs off, a test option for a full card

latest release: v0.9.25
3 hours ago

Pacing tools, a card that backs off, and a test option for a full graphics card. The frame trace and the "What stands out" card are for the next "bumpy pacing" report; Neural Rendering now spares a full card; the upscalers'
motion is right at frame-generation ratios that are not whole numbers; a settings file with nonsense in it cannot break the addons. Nothing here changes a picture unless an option is turned on.

  • "Lighter upscaling of generated frames (test)" (the three upscalers, off by default). With frame generation the upscaler runs on every presented frame, and in the owner's HDR 1.5x log that was 3.3 ms of GPU
    for each (6.6 ms for each frame the game draws, about two thirds of everything the addons add at the spot where the game fell from 60 to 40 fps). With the option on, the frames the game draws get the full upscaler
    and the frames Lossless Scaling makes between them get the last upscaled picture, moved along the motion by their share of the step, checked against the new frame at the scale of a few pixels (where they disagree, the new
    frame stretched plainly), and sharpened as usual: under 1 ms instead of 3. A generated frame is recognised by the generated-frame pass that runs before it. Measured offline on four recordings (docs/frame-generation-research.md):
    detail and flicker about equal, 0.4 to 0.8 dB lower in fast motion, a little lower on the steadiness score. Not yet seen by eye: flip it with the camera turning and in a calm dark scene. The frame trace marks these frames,
    and the log's "frames upscaled" line counts them.
  • The upscalers' "NIS stays" line is no longer alarming while they work. Lossless Scaling draws a second kind of pass into part of the screen, which the upscaler leaves to NIS; the log said "in a way the upscaler cannot follow
    yet ... please report it" about it every 30 s, in logs where 96 % of the frames were being upscaled. Once frames have been upscaled the line says what it is and that it is normal.
  • The upscalers scale the motion by time, not by a count of presents. With frame generation the upscaler is told how far each presented picture is along from the one before. It took that as 1 over
    the number of presents between the last two real frames, which is right for a whole multiplier (x2, x3) but not for Lossless Scaling's adaptive mode or a screen whose refresh rate is not a multiple of
    the game's (120 Hz at 50 fps is 2.4 presents to a frame, so 2 and 3 by turns): the step then alternated between 1/2 and 1/3, up to 20 % wrong on every frame, and the motion the upscaler used shook.
    It is now the smoothed time between presents over the smoothed time between real frames (the log's "presented per real frame" line says "each 0.42 of a real step"). Unchanged for x2 and x3.
    A reported symptom this may explain (bad pacing at 40 to 59 fps on a 120 Hz screen, clean at 25 to 39); not yet seen live.
  • A settings file with nonsense in it cannot put the addons out of range. A new test feeds every setting a list of bad texts (nan, inf, 1e308, negatives, words, empty). It found that "nan" in
    any number got through the limits (a comparison with nan is never true), that a few settings had no limit at all (the model's intensity, fine detail, local contrast, the compose blend, the
    per-pixel limit, the protect-bright start, the flow unit, the slow-model watchdog, the tap mode) and that a huge number could overflow the conversion to a whole number. Numbers that are not
    finite now read as the setting's default (or, in a look, leave the setting as it was), and every setting is limited to a little wider than its slider.
  • A reset of the history was lost when its frame was left out (Neural Rendering). "Reset history", a change of the model's size and a rebuild each ask for a reset with the next frame given to the model;
    if that frame was left out (the model busy, or its turn off under auto quality's every-Nth setting) the request was spent and the history never reset. It now waits for a frame that runs
    (Neural Rendering; the upscalers already kept theirs).
  • A "What stands out" card in each addon's panel. From the numbers the addon already keeps (how even the game's frames were over the last few seconds, what the model waited for, what auto quality
    is doing, what the upscaler costs) it says in plain words what is wrong and what to try: "the game's frame times are uneven... the graphics card is full", "the model waits 9 ms for the card",
    "auto quality is running the model on every 2nd frame", "you are looking at the plain picture (the before / after toggle)". It stays empty when nothing stands out. New test nr_diagtest.
  • A frame trace for pacing problems. The logs keep averages, which is why "bumpy pacing" could not be looked into. The Neural Rendering and upscaler addons now keep a timeline of the last
    131 000 events (a real frame arriving, every present, each model run with its GPU start delay, each upscaler pass, auto quality's changes, hotkeys), at a cost of a timestamp and four integers
    a frame, and write it to logs\frame-trace-<addon>.csv at shutdown and whenever a recording is saved (Ctrl+Shift+F1). tools/analyze_frame_trace.py reads it: the interval of the
    presented and the real frames (p50, p95, p99, low 1 %), the longest gaps with what else happened around them, whether the model's runs line up with the gaps, and the upscaler's and auto
    quality's numbers. Sending that file with the logs is enough to see where a stutter came from. New test nr_tracetest (threads, wrap-around, export).
  • Neural Rendering's compose pass is about 10 % cheaper in HDR. It is one pass per presented frame (two per real frame with frame generation) and cost 0.94 ms of GPU at 4K in HDR with
    sharpening (0.98 in a live log). The sharpening converted each neighbour's SDR view again for every pixel that reads it, and the way back into the frame's encoding made two round trips
    through the view that are the identity: now each pixel's view is made once per 8x8 tile and the round trips are replaced by direct light conversions. 0.94 -> 0.83 ms (0.59 -> 0.56 without
    sharpening); the result is the same up to fp16 rounding (one half-float step at most; a mean difference of 0.00003). SDR is unchanged. Measured with the new nr_composebench.
  • Neural Rendering backs off further when the game's frames stay slow. From the owner's log: at the lowest model resolution (the floor, 0.25) the model still took 2 to 6 ms and waited 6 to 22 ms for the
    card, and while it ran the game's frame time spiked (p95 17.6 ms with Neural Rendering off, 29 to 31 ms with it on, at the same spot at 60 fps): judder, and what a player described as bumpy pacing. Auto
    quality now also runs the model on every 2nd (then 3rd) real frame when the game's frames are still well over the best they have lately managed even at the floor (the presents keep warping the last
    result, as they already do while the model is busy), and goes back to every frame after the game has been steady for 10 s (not before 30 s after the last increase). The log says when ("auto: the model now
    runs on every 2nd frame"). Only with auto quality on. Not yet seen live.

Don't miss a new ls-addon-manager release

NewReleases is sending notifications on new releases.