RFC for a render API to support adaptive sync and VRR

Harry Wentland harry.wentland at amd.com
Mon Apr 9 19:56:10 UTC 2018


=== What is adaptive sync and VRR? ===

Adaptive sync has been part of the DisplayPort spec for a while now and allows graphics adapters to drive displays with varying frame timings. VRR (variable refresh rate) is essentially the same, but defined for HDMI.



=== Why allow variable frame timings? ===

Variable render times don't align with fixed refresh rates, leading to
stuttering, tearing, and/or input lag.

e.g. (rc = render completion, dr = display refresh)

rc       B          C            D            E      F
dr	A	B	C	C	D	E	F

                    ^             ^        
		  frame         missed     
		 repeated	display    
		  twice	        refresh   



=== Other use cases of adaptive sync ====

Beside the variable render case, adaptive sync also allows adjustment of refresh rates without a mode change. One such use case would be 24 Hz video.



=== A DRM render API to support variable refresh rates ===

In order to benefit from adaptive sync and VRR userland needs a way to let us know whether to vary frame timings or to target a different frame time. These can be provided as atomic properties on a CRTC:
 * bool	variable_refresh_compatible
 * int	target_frame_duration_ns (nanosecond frame duration)

This gives us the following cases:

variable_refresh_compatible = 0, target_frame_duration_ns = 0
 * drive monitor at timing's normal refresh rate

variable_refresh_compatible = 1, target_frame_duration_ns = 0
 * send new frame to monitor as soon as it's available, if within min/max of monitor's reported capabilities

variable_refresh_compatible = 0/1, target_frame_duration_ns = > 0
 * send new frame to monitor with the specified target_frame_duration_ns

When a target_frame_duration_ns or variable_refresh_compatible cannot be supported the atomic check will reject the commit.



=== Previous discussions ===

https://lists.freedesktop.org/archives/dri-devel/2017-October/155207.html



=== Feedback and moving forward ===

I'm hoping to get some feedback on this or continue the discussion on how adaptive sync / VRR might look like in the DRM ecosystem. Once there are no major concerns or objections left we'll probably start creating some patches to sketch this out a bit better and see how it looks in practice.



Cheers,
Harry


More information about the amd-gfx mailing list