Open Nustat0 opened 3 months ago
Adaptive (Prefer Off): only enables tearing if Render Latency exceeds 1 frame.
Does that even happen? Latent Sync is VSYNC off, I'm having a hard time picturing how render latency gets > 1 frame.
This seems more like a feature appropriate for non-Latent Sync modes. I like the premise of letting the screen tear for 1 or more frames until latency comes down for fixed-refresh users, a lot, but I don't think that's a problem that Latent Sync has to begin with.
Does that even happen? Latent Sync is VSYNC off, I'm having a hard time picturing how render latency gets > 1 frame.
It happens when Latent Sync is used with Allow Tearing
option unchecked. With tearing disabled, Latent Sync acts similarly to VSync and increases Render Latency in some scenarios (gets "stuck" above 1 frame after experiencing loading screens, sudden frame drops, loss of Independent Flip).
You can easily reproduce it by enabling Latent Sync, disabling tearing and temporarily losing Independent Flip. When presentation mode transitions from Composed Flip to Independent Flip, Render Latency rises above 1 frame.
I only tested this on a fixed-refresh 60 Hz monitor, maybe it's less of an issue on higher refresh rates?
This seems more like a feature appropriate for non-Latent Sync modes. I like the premise of letting the screen tear for 1 or more frames until latency comes down for fixed-refresh users, a lot, but I don't think that's a problem that Latent Sync has to begin with.
In non-Latent Sync mode, especially fixed-refresh VSync, you'd have to toggle presentation interval to 0/1 which goes back and forth between Latent Sync and Normal modes. That's why I restricted Adaptive Tearing modes to Latent Sync - presentation interval stays the same (0) and it's simply easier toggling tearing On/Off.
This seems more like a feature appropriate for non-Latent Sync modes. I like the premise of letting the screen tear for 1 or more frames until latency comes down for fixed-refresh users, a lot, but I don't think that's a problem that Latent Sync has to begin with.
In non-Latent Sync mode, especially fixed-refresh VSync, you'd have to toggle presentation interval to 0/1 which goes back and forth between Latent Sync and Normal modes. That's why I restricted Adaptive Tearing modes to Latent Sync - presentation interval stays the same (0) and it's simply easier toggling tearing On/Off.
Update: I also implemented Adaptive VSync mode for non-Latent-Sync usage. It temporarily turns VSync Off / Tearing On (without enabling Latent Sync) if FPS is unstable or Render Latency exceeds 1 frame.
Marked as draft. I'm finishing off another Tearing Mode "Always Off (Low Latency)" (temporarily lowers FPS limit if Render Latency exceeds 1 frame) :)
2x, 3x, 4x, 5x, 6x
4x, 5x, 6x, 7x, 8x
6x, 7x, 8x, 9x, 10x
...