xf86-video-amdgpu: Branch 'master'

Michel Dänzer daenzer at kemper.freedesktop.org
Fri Jul 22 10:13:19 UTC 2016


 src/amdgpu_dri2.c |    8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

New commits:
commit abd1a7901c95e4bc78415cf1b7923623b9177152
Author: Michel Dänzer <michel.daenzer at amd.com>
Date:   Wed Jun 29 17:54:26 2016 +0900

    DRI2: Add interpolated_vblanks in amdgpu_dri2_get_crtc_msc
    
    We need that in amdgpu_dri2_drawable_crtc as well for priv->vblank_delta
    to work as intended.
    
    amdgpu_dri2_get_msc was already doing this.
    
    Fixes hangs in some cases when using VDPAU via DRI2 and moving the
    window between CRTCs.
    
    Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

diff --git a/src/amdgpu_dri2.c b/src/amdgpu_dri2.c
index dd18e72..bd04256 100644
--- a/src/amdgpu_dri2.c
+++ b/src/amdgpu_dri2.c
@@ -402,10 +402,11 @@ static uint32_t amdgpu_get_msc_delta(DrawablePtr pDraw, xf86CrtcPtr crtc)
  */
 static Bool amdgpu_dri2_get_crtc_msc(xf86CrtcPtr crtc, CARD64 *ust, CARD64 *msc)
 {
+	drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
+
 	if (!amdgpu_crtc_is_enabled(crtc) ||
 	    drmmode_crtc_get_ust_msc(crtc, ust, msc) != Success) {
 		/* CRTC is not running, extrapolate MSC and timestamp */
-		drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
 		ScrnInfoPtr scrn = crtc->scrn;
 		AMDGPUEntPtr pAMDGPUEnt = AMDGPUEntPriv(scrn);
 		CARD64 now, delta_t, delta_seq;
@@ -430,6 +431,8 @@ static Bool amdgpu_dri2_get_crtc_msc(xf86CrtcPtr crtc, CARD64 *ust, CARD64 *msc)
 		*msc += delta_seq;
 	}
 
+	*msc += drmmode_crtc->interpolated_vblanks;
+
 	return TRUE;
 }
 
@@ -883,7 +886,8 @@ static int amdgpu_dri2_get_msc(DrawablePtr draw, CARD64 * ust, CARD64 * msc)
 	if (!amdgpu_dri2_get_crtc_msc(crtc, ust, msc))
 		return FALSE;
 
-	*msc += amdgpu_get_msc_delta(draw, crtc);
+	if (draw && draw->type == DRAWABLE_WINDOW)
+		*msc += get_dri2_window_priv((WindowPtr)draw)->vblank_delta;
 	*msc &= 0xffffffff;
 	return TRUE;
 }


More information about the xorg-commit mailing list