modesetting: Fall back to primary crtc for vblank for drawables on slave outputs
This fixes glxgears running at 1 fps when fully covering a slave-output and the modesetting driver is used for the master gpu. Reported-by: Peter Wu <peter@lekensteyn.nl> Reviewed-by: Adam Jackson <ajax@redhat.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
This commit is contained in:
parent
7ade8ba10e
commit
d8e05c0475
|
@ -128,6 +128,32 @@ ms_covering_crtc(ScreenPtr pScreen, BoxPtr box, Bool screen_is_ms)
|
|||
best_coverage = coverage;
|
||||
}
|
||||
}
|
||||
|
||||
/* Fallback to primary crtc for drawable's on slave outputs */
|
||||
if (best_crtc == NULL && !pScreen->isGPU) {
|
||||
RROutputPtr primary_output = NULL;
|
||||
ScreenPtr slave;
|
||||
|
||||
if (dixPrivateKeyRegistered(rrPrivKey))
|
||||
primary_output = RRFirstOutput(scrn->pScreen);
|
||||
if (!primary_output || !primary_output->crtc)
|
||||
return NULL;
|
||||
|
||||
crtc = primary_output->crtc->devPrivate;
|
||||
if (!ms_crtc_on(crtc))
|
||||
return NULL;
|
||||
|
||||
xorg_list_for_each_entry(slave, &pScreen->slave_list, slave_head) {
|
||||
if (!slave->is_output_slave)
|
||||
continue;
|
||||
|
||||
if (ms_covering_crtc(slave, box, FALSE)) {
|
||||
/* The drawable is on a slave output, return primary crtc */
|
||||
return crtc;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return best_crtc;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue