modesetting: Fix prime screen not display when expansion screen rotates

In the multi screen mode, rotating the expansion screen will cause
the prime screen not to display, because crtcs sharing the fb, and delete
one crtc fb will affect other crtcs.

One method is to delete all crtcs fb first and then re-create it. And the
best solution is to provide a reference mechanism for crtcs sharing fb,
drmModeRmFB until ref is 0.
This commit is contained in:
lihongtao 2022-11-18 10:32:37 +08:00
parent 82bf391c93
commit 6583adb08b

View file

@ -424,6 +424,14 @@ ms_present_unflip(ScreenPtr screen, uint64_t event_id)
drmmode_crtc->drmmode->fb_id);
drmmode_crtc->drmmode->fb_id = 0;
}
}
for (i = 0; i < config->num_crtc; i++) {
xf86CrtcPtr crtc = config->crtc[i];
drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
if (!crtc->enabled)
continue;
if (drmmode_crtc->dpms_mode == DPMSModeOn)
crtc->funcs->set_mode_major(crtc, &crtc->mode, crtc->rotation,