xfree86/modes: Take rotation into account when checking mode size

Assume that a mode can be used in either landscape or portrait
orientation. I suppose the correct thing to do would be to
collect all the supported rotations from the CRTCs that can be used
with a specific output, but that information doesn't seem to be
readily available when these checks are done. So just assume that
either orientation is fine.

Signed-off-by: Ville Syrjälä <ville.syrjala@nokia.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
(cherry picked from commit 2e781457d4)
(cherry picked from commit aec278eb65)
This commit is contained in:
Ville Syrjälä 2010-12-16 18:22:13 +02:00 committed by Julien Cristau
parent 6a6d907e77
commit 2fd67c3454
1 changed files with 23 additions and 6 deletions

View File

@ -362,15 +362,32 @@ xf86ValidateModesSize(ScrnInfoPtr pScrn, DisplayModePtr modeList,
{
DisplayModePtr mode;
if (maxPitch <= 0)
maxPitch = MAXINT;
if (maxX <= 0)
maxX = MAXINT;
if (maxY <= 0)
maxY = MAXINT;
for (mode = modeList; mode != NULL; mode = mode->next) {
if (maxPitch > 0 && mode->HDisplay > maxPitch)
mode->status = MODE_BAD_WIDTH;
if ((xf86ModeWidth(mode, RR_Rotate_0) > maxPitch ||
xf86ModeWidth(mode, RR_Rotate_0) > maxX ||
xf86ModeHeight(mode, RR_Rotate_0) > maxY) &&
(xf86ModeWidth(mode, RR_Rotate_90) > maxPitch ||
xf86ModeWidth(mode, RR_Rotate_90) > maxX ||
xf86ModeHeight(mode, RR_Rotate_90) > maxY)) {
if (xf86ModeWidth(mode, RR_Rotate_0) > maxPitch ||
xf86ModeWidth(mode, RR_Rotate_90) > maxPitch)
mode->status = MODE_BAD_WIDTH;
if (maxX > 0 && mode->HDisplay > maxX)
mode->status = MODE_VIRTUAL_X;
if (xf86ModeWidth(mode, RR_Rotate_0) > maxX ||
xf86ModeWidth(mode, RR_Rotate_90) > maxX)
mode->status = MODE_VIRTUAL_X;
if (maxY > 0 && mode->VDisplay > maxY)
mode->status = MODE_VIRTUAL_Y;
if (xf86ModeHeight(mode, RR_Rotate_0) > maxY ||
xf86ModeHeight(mode, RR_Rotate_90) > maxY)
mode->status = MODE_VIRTUAL_Y;
}
if (mode->next == modeList)
break;