MaxTendency wrote: ↑13 Jul 2020, 02:06
That's already adding 1 frame worth of delay
best case scenario.
Good News: Incorrect.
Processing is sub-refresh on NVIDIA cards.
The way the framebuffer workflows is that a framebuffer can be immediately/instantly processed by a GPU shader right at the frame presentation time. For example, some operations via a GPU shader (like digitally change saturation / contrast / brightness / GPU scaling / etc), take less than ~0.05ms on some of the faster NVIDIA GPUs.
The latency chain is a
highly complex one but this ain't a weak link. The processing workflow at the GPU level on modern GPUs is really amazingly fast, given the humongous bandwidth of graphics memory, so global frame processing is done quite promptly, on a whole frame, darn nearly instantly.
GPU scaling is also another thing that is done practically instantly. 10 years ago it was faster via monitor, but now it's equally as fast (or even faster) via GPU, since it's done in drivers right at frame presentation stage.
Now, if you HAD to do lookahead processing (e.g. interpolate between previous and next frame), there is a frame lag. But FreeStyle doesn't need lookahead processing.
As I have worked with monitor manufacturers, and understand the Present()-to-Photons pipeline well enough to create software that
raster-interrupt beam-race those VSYNC OFF tearlines (microsecond-exact placement of VSYNC OFF tearlines!!!), I can definitively tell you that you
DO NOT need a full frame latency for FreeStyle-style processing type stuff...
TL;DR: There is probably lag, but it's probably frametime-only lag, rather than a full frame lag.
How To Calculate Lag Differences From Frametime-Differentials
Frametime-based latency is easy to calculate. The latency difference between two framerates, is the time-differential between two frame rates. For example, if a framerate dips from 200fps to 190fps, then the time difference between (1/190sec) - (1/200sec) = 0.26 milliseconds = 260 microsecond input latency difference between 190fps versus 200fps.
Also, some processing takes more time than others, some may only take 50 microseconds (an approximate ~2fps drop at 200fps), while others may take 1 millisecond (an approximate ~35fps drop at 200fps). So to measure the input lag of FreeStyle-style processing:
1. Measure framerate of one location in game
2. Turn on filters
3. Measure new framerate
4. For most existing games, the input lag difference is the frametime difference between two frame rates.
This is how postprocessing lag works nowadays on NVIDIA cards. More complex filters = bigger framerate drop = bigger frametime differences. Whether it's a 2D framebuffer process (e.g. color filters) or a 3D framebuffer process (e.g. adding more textures/detail), it can be done on a sub-frame / sub-refresh latency basis.
See....Not a full frame lag. It's tinier than that.
Is the Benefits Worth it for competitive?
Depends on if human reaction time improves more than the lag added. If you're trying to boost shadows or make picture more colorful, it may make enemies easier to identify quicker. Improve your human reaction time by a slightly bigger degree than the processing time difference. Be warned, many esports games may not allow advanced-processing filters due to cheating rules, although simpler filters are allowed such as those filters built into monitors (shadow boost, gamma, saturation, etc)
Can a full frame lag still happen sometimes?
An absolute fixed-lag of a full framebuffer (or two or an integer count) mainly occurs only if the
specific filter chosen, requires lookahead capability. But this will be a
tape-delay-style lag (buffer-behind lag) instead of a
frame holdup lag (processing lag). Filters that process a current frame using data of both the NEXT frame and PREVIOUS frame, is commonly used by interpolation, which is why lag exists for interpolation.
Yes, it is possible for both latencies to exist simultaneously though (e.g. buffering lag + processing lag).
Yes, it is possible for reprocessing to take so much time, more than the original frametime, but the processing lag is not linked to absolute frametimes like framebuffer lag.