modesetting: Suspend and resume flipping with DPMS

DPMS would prevent page flip / vblank events from being raised, freezing
the screen until PRIME flipping was reinitialized. To handle DPMS cleanly,
suspend PRIME page flipping when DPMS mode is not on, and resume it when
DPMS mode is on.

v1: Initial commit
v2: Moved flipping_active check from previous commit to here
v3: Unchanged
v4: Unchanged
v5: Move flipping_active check to sink support commit
v6: Rebase onto ToT
v7: Unchanged

Reviewed-by: Dave Airlie <airlied@redhat.com>
Signed-off-by: Alex Goins <agoins@nvidia.com>
This commit is contained in:
Alex Goins 2016-06-16 20:06:53 -07:00 committed by Adam Jackson
parent 80e64dae8a
commit 500853086d

View File

@ -1405,12 +1405,22 @@ drmmode_output_dpms(xf86OutputPtr output, int mode)
drmModeConnectorSetProperty(drmmode->fd, koutput->connector_id,
drmmode_output->dpms_enum_id, mode);
if (mode == DPMSModeOn && crtc) {
if (crtc) {
drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
if (drmmode_crtc->need_modeset)
drmmode_set_mode_major(crtc, &crtc->mode, crtc->rotation,
crtc->x, crtc->y);
if (mode == DPMSModeOn) {
if (drmmode_crtc->need_modeset)
drmmode_set_mode_major(crtc, &crtc->mode, crtc->rotation,
crtc->x, crtc->y);
if (drmmode_crtc->enable_flipping)
drmmode_InitSharedPixmapFlipping(crtc, drmmode_crtc->drmmode);
} else {
if (drmmode_crtc->enable_flipping)
drmmode_FiniSharedPixmapFlipping(crtc, drmmode_crtc->drmmode);
}
}
return;
}