mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2026-05-06 05:48:02 +02:00
present: fallback get_crtc to return crtc belonging to screen with present extension
Since crtc can belong to secondary output that may not have present extension enabled we should fallback to first enabled crtc or fake crtc. Fix for issue xorg/xserver#1195
This commit is contained in:
parent
f6f2f203bc
commit
d6c02ffd9c
3 changed files with 38 additions and 1 deletions
|
|
@ -44,11 +44,19 @@ present_get_crtc(WindowPtr window)
|
|||
{
|
||||
ScreenPtr screen = window->drawable.pScreen;
|
||||
present_screen_priv_ptr screen_priv = present_screen_priv(screen);
|
||||
RRCrtcPtr crtc = NULL;
|
||||
|
||||
if (!screen_priv)
|
||||
return NULL;
|
||||
|
||||
return screen_priv->get_crtc(screen_priv, window);
|
||||
crtc = screen_priv->get_crtc(screen_priv, window);
|
||||
if (crtc && !present_screen_priv(crtc->pScreen)) {
|
||||
crtc = RRFirstEnabledCrtc(screen);
|
||||
}
|
||||
if (crtc && !present_screen_priv(crtc->pScreen)) {
|
||||
crtc = NULL;
|
||||
}
|
||||
return crtc;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -697,6 +697,33 @@ RRFirstOutput(ScreenPtr pScreen)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
RRCrtcPtr
|
||||
RRFirstEnabledCrtc(ScreenPtr pScreen)
|
||||
{
|
||||
rrScrPriv(pScreen);
|
||||
RROutputPtr output;
|
||||
int i, j;
|
||||
|
||||
if (!pScrPriv)
|
||||
return NULL;
|
||||
|
||||
if (pScrPriv->primaryOutput && pScrPriv->primaryOutput->crtc &&
|
||||
pScrPriv->primaryOutput->pScreen == pScreen)
|
||||
return pScrPriv->primaryOutput->crtc;
|
||||
|
||||
for (i = 0; i < pScrPriv->numCrtcs; i++) {
|
||||
RRCrtcPtr crtc = pScrPriv->crtcs[i];
|
||||
|
||||
for (j = 0; j < pScrPriv->numOutputs; j++) {
|
||||
output = pScrPriv->outputs[j];
|
||||
if (output->crtc == crtc && crtc->mode)
|
||||
return crtc;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
CARD16
|
||||
RRVerticalRefresh(xRRModeInfo * mode)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -593,6 +593,8 @@ extern _X_EXPORT Bool RRScreenInit(ScreenPtr pScreen);
|
|||
|
||||
extern _X_EXPORT RROutputPtr RRFirstOutput(ScreenPtr pScreen);
|
||||
|
||||
extern _X_EXPORT RRCrtcPtr RRFirstEnabledCrtc(ScreenPtr pScreen);
|
||||
|
||||
extern _X_EXPORT Bool RROutputSetNonDesktop(RROutputPtr output, Bool non_desktop);
|
||||
|
||||
extern _X_EXPORT CARD16
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue