This low-latency mode aims to reduce latency with minimal impact in fps. Effective when operating in the GPU-limit. Efficient to be used in the CPU-limit as well.
Greatly reduces input lag variations when switching between CPU- and GPU-limit, and compared to the max-frame-latency approach, it has a much more stable input lag when GPU running times change dramatically, which can happen for example when rotating within a scene.
The current implementation rather generates fluctuations alternating frame-by-frame depending on the game's and dxvk's CPU-time variations. This might be visible as a loss in smoothness, which is an area this implementation can be further improved.
An interesting observation while playtesting was that not only the input lag was affected, but the video generated did progress more cleanly in time as well with regards to the wow and flutter effect.
This version renders with up to 67% latency reduction in the GPU limit compared to max-frame-latency-3 and with up to 35% latency reduction compared to max-frame-latency-1.
Optimized for VRR and VK_PRESENT_MODE_IMMEDIATE_KHR, proper optimization for v-sync may follow later. It also comes with its own fps-limiter which is typically used to prevent the game's fps exceeding the monitor's refresh rate.
Usage
Add renderlatency
to the DXVK_HUD
variable to watch the render latency in real-time.
DXVK_FRAME_PACE
has the options max-frame-latency
, low-latency
and min-latency
. This release defaults to low-latency
for demonstration purposes.
DXVK_LOW_LATENCY_OFFSET
allows for fine-tuning the low-latency
mode. Values are in microseconds. Positive values might improve responsiveness even further, although only very slightly, this may be relevant for edge cases. Negative values might improve fps. Defaults to 0.
These environment variables are also represented in the dxvk.conf: dxvk.framePace
and dxvk.lowLatencyOffset
.
Benchmark
Below are latency measurements of what is to be expected when running games in the GPU-limit: