randr: Avoid needlessly creating a shadow framebuffer.

- pScreen->width and height were zero, so it didn't "fit" the screen.
This commit is contained in:
Maarten Maathuis 2008-11-29 14:30:55 +01:00
parent 01eaebdc98
commit ffb484f7ef
2 changed files with 12 additions and 3 deletions

View File

@ -112,6 +112,8 @@ xf86CrtcCreate (ScrnInfoPtr scrn,
crtc->filter_width = 0; crtc->filter_width = 0;
crtc->filter_height = 0; crtc->filter_height = 0;
crtc->transform_in_use = FALSE; crtc->transform_in_use = FALSE;
crtc->transformPresent = FALSE;
crtc->desiredTransformPresent = FALSE;
memset (&crtc->bounds, '\0', sizeof (crtc->bounds)); memset (&crtc->bounds, '\0', sizeof (crtc->bounds));
if (xf86_config->crtc) if (xf86_config->crtc)
@ -241,6 +243,8 @@ xf86CrtcSetModeTransform (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotati
RRTransformPtr transform, int x, int y) RRTransformPtr transform, int x, int y)
{ {
ScrnInfoPtr scrn = crtc->scrn; 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); xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
int i; int i;
Bool ret = FALSE; Bool ret = FALSE;
@ -254,9 +258,9 @@ xf86CrtcSetModeTransform (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotati
if (crtc->funcs->set_mode_major) if (crtc->funcs->set_mode_major)
return crtc->funcs->set_mode_major(crtc, mode, rotation, x, y); return crtc->funcs->set_mode_major(crtc, mode, rotation, x, y);
crtc->enabled = xf86CrtcInUse (crtc); crtc->enabled = xf86CrtcInUse (crtc);
if (!crtc->enabled) if (!crtc->enabled)
{ {
/* XXX disable crtc? */ /* XXX disable crtc? */
@ -290,6 +294,11 @@ xf86CrtcSetModeTransform (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotati
} else } else
crtc->transformPresent = FALSE; crtc->transformPresent = FALSE;
/* 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 */ /* Shift offsets that move us out of virtual size */
if (x + mode->HDisplay > xf86_config->maxWidth || if (x + mode->HDisplay > xf86_config->maxWidth ||
y + mode->VDisplay > xf86_config->maxHeight) y + mode->VDisplay > xf86_config->maxHeight)

View File

@ -464,7 +464,7 @@ xf86CrtcRotate (xf86CrtcPtr crtc)
/* mark shadowed area as damaged so it will be repainted */ /* mark shadowed area as damaged so it will be repainted */
xf86CrtcDamageShadow (crtc); xf86CrtcDamageShadow (crtc);
} }
if (!xf86_config->rotation_damage) if (!xf86_config->rotation_damage)
{ {
/* Create damage structure */ /* Create damage structure */