Add a bunch of useful modes to the mode list.
authorPhilip Langdale <philipl@fido2.homeip.net>
Fri, 9 Feb 2007 01:08:08 +0000 (17:08 -0800)
committerPhilip Langdale <philipl@fido2.homeip.net>
Fri, 9 Feb 2007 01:08:08 +0000 (17:08 -0800)
    The X server prunes modes above the initial mode and
    the number of default modes varies with distro and
    server version. As it's easy to do, let's add a bunch
    of useful versions in the driver so that users don't
    have to mess with their config files as often.

src/svga_modes.h [new file with mode: 0644]
src/vmware.c

diff --git a/src/svga_modes.h b/src/svga_modes.h
new file mode 100644 (file)
index 0000000..fb5dbe1
--- /dev/null
@@ -0,0 +1,48 @@
+/* **********************************************************
+ * Copyright (C) 2007 VMware, Inc. All Rights Reserved
+ * **********************************************************/
+
+#ifndef _SVGA_MODES_H_
+#define _SVGA_MODES_H_
+
+#define INCLUDE_ALLOW_USERLEVEL
+#include "includeCheck.h"
+
+#define SVGA_DEFAULT_MODES \
+   /* 4:3 modes */ \
+   SVGA_DEFAULT_MODE( 320,  240) \
+   SVGA_DEFAULT_MODE( 400,  300) \
+   SVGA_DEFAULT_MODE( 512,  384) \
+   SVGA_DEFAULT_MODE( 640,  480) \
+   SVGA_DEFAULT_MODE( 800,  600) \
+   SVGA_DEFAULT_MODE(1024,  768) \
+   SVGA_DEFAULT_MODE(1152,  864) \
+   SVGA_DEFAULT_MODE(1280,  960) \
+   SVGA_DEFAULT_MODE(1400, 1050) \
+   SVGA_DEFAULT_MODE(1600, 1200) \
+   SVGA_DEFAULT_MODE(1920, 1440) \
+   SVGA_DEFAULT_MODE(2048, 1536) \
+   SVGA_DEFAULT_MODE(2560, 1920) \
+   /* 16:9 modes */ \
+   SVGA_DEFAULT_MODE( 854,  480) \
+   SVGA_DEFAULT_MODE(1280,  720) \
+   SVGA_DEFAULT_MODE(1366,  768) \
+   SVGA_DEFAULT_MODE(1900, 1080) \
+   /* 16:10 modes */ \
+   SVGA_DEFAULT_MODE(1280,  800) \
+   SVGA_DEFAULT_MODE(1440,  900) \
+   SVGA_DEFAULT_MODE(1680, 1050) \
+   SVGA_DEFAULT_MODE(1920, 1200) \
+   SVGA_DEFAULT_MODE(2560, 1600) \
+   /* DVD modes */ \
+   SVGA_DEFAULT_MODE( 720, 480) \
+   SVGA_DEFAULT_MODE( 720, 576) \
+   /* Odd modes */ \
+   SVGA_DEFAULT_MODE( 320,  200) \
+   SVGA_DEFAULT_MODE( 640,  400) \
+   SVGA_DEFAULT_MODE( 800,  480) \
+   SVGA_DEFAULT_MODE(1280,  768) \
+   SVGA_DEFAULT_MODE(1280, 1024)
+
+
+#endif /* _SVGA_MODES_H_ */
index 576530c..ea3f117 100644 (file)
@@ -37,6 +37,7 @@ char rcsId_vmware[] =
 #include "vmware.h"
 #include "guest_os.h"
 #include "vm_device_version.h"
+#include "svga_modes.h"
 
 #ifdef HaveDriverFuncs
 #define VMWARE_DRIVER_FUNC HaveDriverFuncs
@@ -175,6 +176,21 @@ static const OptionInfoRec VMWAREOptions[] = {
     { -1,               NULL,           OPTV_NONE,      {0},    FALSE }
 };
 
+/* Table of default modes to always add to the mode list. */
+
+typedef struct {
+   int width;
+   int height;
+} VMWAREDefaultMode;
+
+#define SVGA_DEFAULT_MODE(width, height) { width, height, },
+
+static const VMWAREDefaultMode VMWAREDefaultModes[] = {
+   SVGA_DEFAULT_MODES
+};
+
+#undef SVGA_DEFAULT_MODE
+
 static void VMWAREStopFIFO(ScrnInfoPtr pScrn);
 static void VMWARESave(ScrnInfoPtr pScrn);
 
@@ -1560,6 +1576,22 @@ VMWAREScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
     }
 
     /*
+     * We explictly add a set of default modes because the X server will
+     * not include modes larger than the initial one.
+     */
+   {
+      unsigned int i;
+      unsigned int numModes = sizeof (VMWAREDefaultModes) / sizeof *(VMWAREDefaultModes);
+      char name[10];
+      for (i = 0; i < numModes; i++) {
+         snprintf(name, 10, "%dx%d",
+                  VMWAREDefaultModes[i].width, VMWAREDefaultModes[i].height);
+         VMWAREAddDisplayMode(pScrn, name, VMWAREDefaultModes[i].width,
+                              VMWAREDefaultModes[i].height);
+      }
+   }
+
+    /*
      * We will lazily add the dynamic modes as the are needed when new
      * modes are requested through the control extension.
      */