mirror of
https://github.com/X11Libre/xf86-video-amdgpu.git
synced 2026-03-24 01:24:31 +00:00
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@amd.com>
This commit is contained in:
committed by
Michel Dänzer
parent
978242977e
commit
abd1a7901c
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user