Use scrn->virtualX/virtualY in xf86CrtcFitsScreen. Fix bug 19017.
pScreen->width/height are not initialized when doing initial mode setting, which makes this function incorrectly fail. Using scrn->virtualX should work in all cases though. Bug 19017 reports a crash in xf86CrtcSetModeTransform when doing a modeset for output probing, long before the screen array is initialized; that was caused by a work-around to set pScreen->width/height so that xf86CrtcFitsScreen could find the right values. Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
parent
29a5b0596b
commit
fde2f96103
|
@ -244,8 +244,6 @@ xf86CrtcSetModeTransform (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotati
|
|||
RRTransformPtr transform, int x, int y)
|
||||
{
|
||||
ScrnInfoPtr scrn = crtc->scrn;
|
||||
/* During ScreenInit() scrn->pScreen is still NULL */
|
||||
ScreenPtr pScreen = screenInfo.screens[scrn->scrnIndex];
|
||||
xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
|
||||
int i;
|
||||
Bool ret = FALSE;
|
||||
|
@ -295,15 +293,6 @@ xf86CrtcSetModeTransform (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotati
|
|||
} else
|
||||
crtc->transformPresent = FALSE;
|
||||
|
||||
/* We may hit this path during PreInit during load-detcect, at
|
||||
* which point no pScreens exist yet, so avoid this step. */
|
||||
if (pScreen) {
|
||||
/* xf86CrtcFitsScreen() relies on these values being correct. */
|
||||
/* This should ensure the values are always set at modeset time. */
|
||||
pScreen->width = scrn->virtualX;
|
||||
pScreen->height = scrn->virtualY;
|
||||
}
|
||||
|
||||
/* Shift offsets that move us out of virtual size */
|
||||
if (x + mode->HDisplay > xf86_config->maxWidth ||
|
||||
y + mode->VDisplay > xf86_config->maxHeight)
|
||||
|
|
|
@ -364,12 +364,8 @@ static Bool
|
|||
xf86CrtcFitsScreen (xf86CrtcPtr crtc, struct pict_f_transform *crtc_to_fb)
|
||||
{
|
||||
ScrnInfoPtr pScrn = crtc->scrn;
|
||||
/* if this is called during ScreenInit() we don't have pScrn->pScreen yet */
|
||||
ScreenPtr pScreen = screenInfo.screens[pScrn->scrnIndex];
|
||||
BoxRec b;
|
||||
|
||||
if (!pScreen)
|
||||
return TRUE;
|
||||
b.x1 = 0;
|
||||
b.y1 = 0;
|
||||
b.x2 = crtc->mode.HDisplay;
|
||||
|
@ -383,8 +379,8 @@ xf86CrtcFitsScreen (xf86CrtcPtr crtc, struct pict_f_transform *crtc_to_fb)
|
|||
b.y2 += crtc->y;
|
||||
}
|
||||
|
||||
return (0 <= b.x1 && b.x2 <= pScreen->width &&
|
||||
0 <= b.y1 && b.y2 <= pScreen->height);
|
||||
return (0 <= b.x1 && b.x2 <= pScrn->virtualX &&
|
||||
0 <= b.y1 && b.y2 <= pScrn->virtualY);
|
||||
}
|
||||
|
||||
Bool
|
||||
|
|
Loading…
Reference in New Issue
Block a user