Move DPMS check from amdgpu_scanout_do_update to amdgpu_scanout_flip

When amdgpu_scanout_do_update is called from
drmmode_crtc_scanout_update, drmmode_crtc->pending_dpms_mode may still
be != DPMSModeOn, e.g. during server startup.

Fixes intermittently showing garbage with TearFree enabled.

(Ported from radeon commit cc9d6b7db9c2078be1e530a64af6d517c6a42024)
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
Michel Dänzer
2017-03-03 16:41:49 +09:00
committed by Michel Dänzer
parent 378bd05c84
commit ad53635af1

View File

@@ -787,7 +787,6 @@ amdgpu_scanout_do_update(xf86CrtcPtr xf86_crtc, int scanout_id)
BoxRec extents;
if (!xf86_crtc->enabled ||
drmmode_crtc->pending_dpms_mode != DPMSModeOn ||
!drmmode_crtc->scanout[scanout_id].pixmap)
return FALSE;
@@ -970,7 +969,8 @@ amdgpu_scanout_flip(ScreenPtr pScreen, AMDGPUInfoPtr info,
uintptr_t drm_queue_seq;
unsigned scanout_id;
if (drmmode_crtc->scanout_update_pending)
if (drmmode_crtc->scanout_update_pending ||
drmmode_crtc->pending_dpms_mode != DPMSModeOn)
return;
scanout_id = drmmode_crtc->scanout_id ^ 1;