[Spice-devel] [video-qxl 1/2] Stop constraining the video mode to a maximum of 1024x768.
Jeremy White
jwhite at codeweavers.com
Fri Jan 11 13:33:38 PST 2013
But still default to 1024x768 if no other mode is given.
Signed-off-by: Jeremy White <jwhite at codeweavers.com>
---
src/qxl_driver.c | 81 ++++++++++++++----------------------------------------
1 file changed, 20 insertions(+), 61 deletions(-)
diff --git a/src/qxl_driver.c b/src/qxl_driver.c
index e2d08c7..c7a07cb 100644
--- a/src/qxl_driver.c
+++ b/src/qxl_driver.c
@@ -952,13 +952,6 @@ qxl_resize_primary_to_virtual (qxl_screen_t *qxl)
{
ScreenPtr pScreen;
long new_surface0_size;
-
- if ((qxl->primary_mode.x_res == qxl->virtual_x &&
- qxl->primary_mode.y_res == qxl->virtual_y) &&
- qxl->device_primary == QXL_DEVICE_PRIMARY_CREATED)
- {
- return TRUE; /* empty Success */
- }
ErrorF ("resizing primary to %dx%d\n", qxl->virtual_x, qxl->virtual_y);
@@ -1791,15 +1784,7 @@ qxl_screen_init (SCREEN_INIT_ARGS_DECL)
goto out;
if (!miSetPixmapDepths ())
goto out;
- pScrn->displayWidth = pScrn->virtualX;
-#if 0
- ErrorF ("allocated %d x %d %p\n", pScrn->virtualX, pScrn->virtualY, qxl->fb);
-#endif
-
- pScrn->virtualX = pScrn->currentMode->HDisplay;
- pScrn->virtualY = pScrn->currentMode->VDisplay;
-
/* Set up resources */
qxl_reset_and_create_mem_slots (qxl);
ErrorF ("done reset\n");
@@ -2335,12 +2320,6 @@ qxl_init_randr (ScrnInfoPtr pScrn, qxl_screen_t *qxl)
qxl_crtc->output = output;
}
- qxl->virtual_x = 1024;
- qxl->virtual_y = 768;
-
- pScrn->display->virtualX = qxl->virtual_x;
- pScrn->display->virtualY = qxl->virtual_y;
-
xf86InitialConfiguration (pScrn, TRUE);
/* all crtcs are enabled here, but their mode is 0,
resulting monitor config empty atm */
@@ -2352,6 +2331,7 @@ qxl_initialize_x_modes (qxl_screen_t *qxl, ScrnInfoPtr pScrn,
{
int i;
int size;
+ int preferred_flag;
*max_x = *max_y = 0;
/* Create a list of modes used by the qxl_output_get_modes */
@@ -2366,15 +2346,24 @@ qxl_initialize_x_modes (qxl_screen_t *qxl, ScrnInfoPtr pScrn,
qxl->modes[i].x_res, qxl->modes[i].y_res);
continue;
}
-
+
+ if (qxl->modes[i].x_res == 1024 && qxl->modes[i].y_res == 768)
+ preferred_flag = M_T_PREFERRED;
+ else
+ preferred_flag = 0;
+
qxl_add_mode (qxl, pScrn, qxl->modes[i].x_res, qxl->modes[i].y_res,
- M_T_DRIVER);
+ M_T_DRIVER | preferred_flag);
if (qxl->modes[i].x_res > *max_x)
*max_x = qxl->modes[i].x_res;
if (qxl->modes[i].y_res > *max_y)
*max_y = qxl->modes[i].y_res;
}
}
+
+ pScrn->virtualX = pScrn->displayWidth = *max_x;
+ pScrn->virtualY = *max_y;
+ pScrn->virtualFrom = X_PROBED;
}
static Bool
@@ -2496,51 +2485,21 @@ qxl_pre_init (ScrnInfoPtr pScrn, int flags)
pScrn->monitor->vrefresh[0].hi = 75;
pScrn->monitor->nVrefresh = 1;
}
-
+
+ /* Note that we replace the 'normal' xf86ValidateModes call,
+ so this function is obligated to set the same values as
+ that call normally does. */
qxl_initialize_x_modes (qxl, pScrn, &max_x, &max_y);
-#if 0
- if (pScrn->display->virtualX == 0 && pScrn->display->virtualY == 0)
- {
- /* It is possible for the largest x + largest y size combined leading
- to a virtual size which will not fit into the framebuffer when this
- happens we prefer max width and make height as large as possible */
- if (max_x * max_y * (pScrn->bitsPerPixel / 8) >
- qxl->rom->surface0_area_size)
- pScrn->display->virtualY = qxl->rom->surface0_area_size /
- (max_x * (pScrn->bitsPerPixel / 8));
- else
- pScrn->display->virtualY = max_y;
-
- pScrn->display->virtualX = max_x;
- }
-
- if (0 >= xf86ValidateModes (pScrn, pScrn->monitor->Modes,
- pScrn->display->modes, clockRanges, linePitches,
- 128, max_x, 128 * 4, 128, max_y,
- pScrn->display->virtualX,
- pScrn->display->virtualY,
- 128 * 1024 * 1024, LOOKUP_BEST_REFRESH))
- goto out;
-#endif
-
CHECK_POINT ();
xf86PruneDriverModes (pScrn);
qxl_init_randr (pScrn, qxl);
-#if 0
- /* If no modes are specified in xorg.conf, default to 1024x768 */
- if (pScrn->display->modes == NULL || pScrn->display->modes[0] == NULL)
- for (mode = pScrn->modes; mode; mode = mode->next)
- if (mode->HDisplay == 1024 && mode->VDisplay == 768)
- {
- pScrn->currentMode = mode;
- break;
- }
-#endif
-
- //xf86PrintModes (pScrn);
+
+ qxl->virtual_x = pScrn->display->virtualX;
+ qxl->virtual_y = pScrn->display->virtualY;
+
xf86SetDpi (pScrn, 0, 0);
if (!xf86LoadSubModule (pScrn, "fb")
--
1.7.10.4
More information about the Spice-devel
mailing list