update to xf86-video-vmware 10.16.6
This commit is contained in:
parent
29dfc1a9fe
commit
5e0c79c5ff
@ -130,6 +130,7 @@ F77 = @F77@
|
||||
FFLAGS = @FFLAGS@
|
||||
FILE_MAN_DIR = @FILE_MAN_DIR@
|
||||
FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
|
||||
GREP = @GREP@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
@ -170,15 +171,9 @@ XORG_CFLAGS = @XORG_CFLAGS@
|
||||
XORG_LIBS = @XORG_LIBS@
|
||||
XSERVER_LIBPCIACCESS_FALSE = @XSERVER_LIBPCIACCESS_FALSE@
|
||||
XSERVER_LIBPCIACCESS_TRUE = @XSERVER_LIBPCIACCESS_TRUE@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_DSYMUTIL = @ac_ct_DSYMUTIL@
|
||||
ac_ct_F77 = @ac_ct_F77@
|
||||
ac_ct_NMEDIT = @ac_ct_NMEDIT@
|
||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||
ac_ct_STRIP = @ac_ct_STRIP@
|
||||
ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
||||
@ -195,24 +190,31 @@ build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
moduledir = @moduledir@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
|
@ -1,555 +1,12 @@
|
||||
|
||||
Copyright (C) 1999-2002 VMware, Inc.
|
||||
Copyright (C) 1999-2009 VMware, Inc.
|
||||
All Rights Reserved
|
||||
|
||||
The code here may be used/distributed under the terms of the standard
|
||||
XFree86 license.
|
||||
|
||||
Documentation on the VMware SVGA Device programming model
|
||||
has been updated and expanded, and it now lives at:
|
||||
|
||||
VMware SVGA Device Interface and Programming Model
|
||||
--------------------------------------------------
|
||||
http://vmware-svga.sourceforge.net/
|
||||
|
||||
|
||||
Include Files
|
||||
-------------
|
||||
|
||||
svga_reg.h
|
||||
SVGA register definitions, SVGA capabilities, and FIFO command definitions.
|
||||
|
||||
svga_limits.h
|
||||
Included by svga_reg.h, defines maximum frame buffer and memory region
|
||||
sizes.
|
||||
|
||||
svga_modes.h
|
||||
A list of default display modes that are built into the driver.
|
||||
|
||||
svga_overlay.h
|
||||
A list of definitions required for Xv extension support. Included by vmwarevideo.c
|
||||
|
||||
svga_escape.h
|
||||
A list of definitions for the SVGA Escape commands.
|
||||
|
||||
guest_os.h
|
||||
Values for the GUEST_ID register.
|
||||
|
||||
vm_basic_types.h
|
||||
Common type definitions.
|
||||
|
||||
vm_device_version.h
|
||||
PCI vendor ID's and related information.
|
||||
|
||||
vmwarectrl.h
|
||||
vmwarectrlproto.h
|
||||
The definitions of the VMWARECTRL protocol extension.
|
||||
|
||||
Programming the VMware SVGA Device
|
||||
----------------------------------
|
||||
|
||||
1. Reading/writing a register:
|
||||
|
||||
The SVGA registers are addressed by an index/value pair of 32 bit
|
||||
registers in the IO address space.
|
||||
|
||||
The 0710 VMware SVGA chipset (PCI device ID PCI_DEVICE_ID_VMWARE_SVGA) has
|
||||
its index and value ports hardcoded at:
|
||||
|
||||
index: SVGA_LEGACY_BASE_PORT + 4 * SVGA_INDEX_PORT
|
||||
value: SVGA_LEGACY_BASE_PORT + 4 * SVGA_VALUE_PORT
|
||||
|
||||
The 0405 VMware SVGA chipset (PCI device ID PCI_DEVICE_ID_VMWARE_SVGA2)
|
||||
determines its index and value ports as a function of the first base
|
||||
address register in its PCI configuration space as:
|
||||
|
||||
index: <Base Address Register 0> + SVGA_INDEX_PORT
|
||||
value: <Base Address Register 0> + SVGA_VALUE_PORT
|
||||
|
||||
To read a register:
|
||||
Set the index port to the index of the register, using a dword OUT
|
||||
Do a dword IN from the value port
|
||||
|
||||
To write a register:
|
||||
Set the index port to the index of the register, using a dword OUT
|
||||
Do a dword OUT to the value port
|
||||
|
||||
Example, setting the width to 1024:
|
||||
|
||||
mov eax, SVGA_REG_WIDTH
|
||||
mov edx, <SVGA Address Port>
|
||||
out dx, eax
|
||||
mov eax, 1024
|
||||
mov edx, <SVGA Value Port>
|
||||
out dx, eax
|
||||
|
||||
2. Initialization
|
||||
Check the version number
|
||||
loop:
|
||||
Write into SVGA_REG_ID the maximum SVGA_ID_* the driver supports.
|
||||
Read from SVGA_REG_ID.
|
||||
Check if it is the value you wrote.
|
||||
If yes, VMware SVGA device supports it
|
||||
If no, decrement SVGA_ID_* and goto loop
|
||||
This algorithm converges.
|
||||
|
||||
Map the frame buffer and the command FIFO
|
||||
Read SVGA_REG_FB_START, SVGA_REG_FB_SIZE, SVGA_REG_MEM_START,
|
||||
SVGA_REG_MEM_SIZE.
|
||||
Map the frame buffer (FB) and the FIFO memory (MEM)
|
||||
|
||||
Get the device capabilities and frame buffer dimensions
|
||||
Read SVGA_REG_CAPABILITIES, SVGA_REG_MAX_WIDTH, SVGA_REG_MAX_HEIGHT,
|
||||
and SVGA_REG_HOST_BITS_PER_PIXEL / SVGA_REG_BITS_PER_PIXEL.
|
||||
|
||||
Note: The capabilities can and do change without the PCI device ID
|
||||
changing or the SVGA_REG_ID changing. A driver should always check
|
||||
the capabilities register when loading before expecting any
|
||||
capabilities-determined feature to be available. See below for a list
|
||||
of capabilities as of this writing.
|
||||
|
||||
Note: If SVGA_CAP_8BIT_EMULATION is not set, then it is possible that
|
||||
SVGA_REG_HOST_BITS_PER_PIXEL does not exist and
|
||||
SVGA_REG_BITS_PER_PIXEL should be read instead.
|
||||
|
||||
Report the Guest Operating System
|
||||
Write SVGA_REG_GUEST_ID with the appropriate value from <guest_os.h>.
|
||||
While not required in any way, this is useful information for the
|
||||
virtual machine to have available for reporting and sanity checking
|
||||
purposes.
|
||||
|
||||
SetMode
|
||||
Set SVGA_REG_WIDTH, SVGA_REG_HEIGHT, SVGA_REG_BITS_PER_PIXEL
|
||||
Read SVGA_REG_FB_OFFSET
|
||||
(SVGA_REG_FB_OFFSET is the offset from SVGA_REG_FB_START of the
|
||||
visible portion of the frame buffer)
|
||||
Read SVGA_REG_BYTES_PER_LINE, SVGA_REG_DEPTH, SVGA_REG_PSEUDOCOLOR,
|
||||
SVGA_REG_RED_MASK, SVGA_REG_GREEN_MASK, SVGA_REG_BLUE_MASK
|
||||
|
||||
Note: SVGA_REG_BITS_PER_PIXEL is readonly if
|
||||
SVGA_CAP_8BIT_EMULATION is not set in the capabilities register. Even
|
||||
if it is set, values other than 8 and SVGA_REG_HOST_BITS_PER_PIXEL
|
||||
will be ignored.
|
||||
|
||||
Enable SVGA
|
||||
Set SVGA_REG_ENABLE to 1
|
||||
(to disable SVGA, set SVGA_REG_ENABLE to 0. Setting SVGA_REG_ENABLE
|
||||
to 0 also enables VGA.)
|
||||
|
||||
Initialize the command FIFO
|
||||
The FIFO is exclusively dword (32-bit) aligned. The first four
|
||||
dwords define the portion of the MEM area that is used for the
|
||||
command FIFO. These are values are all in byte offsets from the
|
||||
start of the MEM area.
|
||||
|
||||
A minimum sized FIFO would have these values:
|
||||
mem[SVGA_FIFO_MIN] = 16;
|
||||
mem[SVGA_FIFO_MAX] = 16 + (10 * 1024);
|
||||
mem[SVGA_FIFO_NEXT_CMD] = 16;
|
||||
mem[SVGA_FIFO_STOP] = 16;
|
||||
|
||||
Set SVGA_REG_CONFIG_DONE to 1 after these values have been set.
|
||||
|
||||
Note: Setting SVGA_REG_CONFIG_DONE to 0 will stop the device from
|
||||
reading the FIFO until it is reinitialized and SVGA_REG_CONFIG_DONE is
|
||||
set to 1 again.
|
||||
|
||||
3. SVGA command FIFO protocol
|
||||
The FIFO is empty when SVGA_FIFO_NEXT_CMD == SVGA_FIFO_STOP. The
|
||||
driver writes commands to the FIFO starting at the offset specified
|
||||
by SVGA_FIFO_NEXT_CMD, and then increments SVGA_FIFO_NEXT_CMD.
|
||||
|
||||
The FIFO is full when SVGA_FIFO_NEXT_CMD is one word before SVGA_FIFO_STOP.
|
||||
|
||||
When the FIFO becomes full, the FIFO should be sync'd
|
||||
|
||||
To sync the FIFO
|
||||
Write SVGA_REG_SYNC
|
||||
Read SVGA_REG_BUSY
|
||||
Wait for the value in SVGA_REG_BUSY to be 0
|
||||
|
||||
The FIFO should be sync'd before the driver touches the frame buffer, to
|
||||
guarantee that any outstanding BLT's are completed.
|
||||
|
||||
4. Cursor
|
||||
When SVGA_CAP_CURSOR is set, hardware cursor support is available. In
|
||||
practice, SVGA_CAP_CURSOR will only be set when SVGA_CAP_CURSOR_BYPASS is
|
||||
also set and drivers supporting a hardware cursor should only worry about
|
||||
SVGA_CAP_CURSOR_BYPASS and only use the FIFO to define the cursor. See
|
||||
below for more information.
|
||||
|
||||
5. Pseudocolor
|
||||
When the read-only register SVGA_REG_PSEUDOCOLOR is 1, the device is in a
|
||||
colormapped mode whose index width and color width are both SVGA_REG_DEPTH.
|
||||
Thus far, 8 is the only depth at which pseudocolor is ever used.
|
||||
|
||||
In pseudocolor, the colormap is programmed by writing to the SVGA palette
|
||||
registers. These start at SVGA_PALETTE_BASE and are interpreted as
|
||||
follows:
|
||||
|
||||
SVGA_PALETTE_BASE + 3*n - The nth red component
|
||||
SVGA_PALETTE_BASE + 3*n + 1 - The nth green component
|
||||
SVGA_PALETTE_BASE + 3*n + 2 - The nth blue component
|
||||
|
||||
And n ranges from 0 to ((1<<SVGA_REG_DEPTH) - 1).
|
||||
|
||||
|
||||
Drawing to the Screen
|
||||
---------------------
|
||||
|
||||
After initialization, the driver can write directly to the frame buffer. The
|
||||
updated frame buffer is not displayed immediately, but only when an update
|
||||
command is sent. The update command (SVGA_CMD_UPDATE) defines the rectangle
|
||||
in the frame buffer that has been modified by the driver, and causes that
|
||||
rectangle to be updated on the screen.
|
||||
|
||||
A complete driver can be developed this way. For increased performance,
|
||||
additional commands are available to accelerate common operations. The two
|
||||
most useful are SVGA_CMD_RECT_FILL and SVGA_CMD_RECT_COPY.
|
||||
|
||||
After issuing an accelerated command, the FIFO should be sync'd, as described
|
||||
above, before writing to the frame buffer.
|
||||
|
||||
Addendum on 7/11/2000
|
||||
---------------------
|
||||
|
||||
SVGA_REG_FB_OFFSET and SVGA_REG_BYTES_PER_LINE may change after SVGA_REG_WIDTH
|
||||
or SVGA_REG_HEIGHT is set. Also the VGA registers must be written to after
|
||||
setting SVGA_REG_ENABLE to 0 to change the display to a VGA mode.
|
||||
|
||||
Addendum on 11/29/2001
|
||||
---------------------
|
||||
|
||||
Actually, after changing any of SVGA_REG_WIDTH, SVGA_REG_HEIGHT, and
|
||||
SVGA_REG_BITS_PER_PIXEL, all of the registers listed in the 'SetMode'
|
||||
initialization section above should be reread. Additionally, when changing
|
||||
modes, it can be convenient to set SVGA_REG_ENABLE to 0, change
|
||||
SVGA_REG_WIDTH, SVGA_REG_HEIGHT, and SVGA_REG_BITS_PER_PIXEL (if available),
|
||||
and then set SVGA_REG_ENABLE to 1 again.
|
||||
|
||||
|
||||
Capabilities
|
||||
------------
|
||||
|
||||
The capabilities register (SVGA_REG_CAPABILITIES) is an array of bits that
|
||||
indicates the capabilities of the SVGA emulation. A driver should check
|
||||
SVGA_REG_CAPABILITIES every time it loads before relying on any feature that
|
||||
is only optionally available.
|
||||
|
||||
Some of the capabilities determine which FIFO commands are available. This
|
||||
table shows which capability indicates support for which command.
|
||||
|
||||
FIFO Command Capability
|
||||
------------ ----------
|
||||
|
||||
SVGA_CMD_RECT_FILL SVGA_CAP_RECT_FILL
|
||||
SVGA_CMD_RECT_COPY SVGA_CAP_RECT_COPY
|
||||
SVGA_CMD_DEFINE_BITMAP SVGA_CAP_OFFSCREEN
|
||||
SVGA_CMD_DEFINE_BITMAP_SCANLINE SVGA_CAP_OFFSCREEN
|
||||
SVGA_CMD_DEFINE_PIXMAP SVGA_CAP_OFFSCREEN
|
||||
SVGA_CMD_DEFINE_PIXMAP_SCANLINE SVGA_CAP_OFFSCREEN
|
||||
SVGA_CMD_RECT_BITMAP_FILL SVGA_CAP_RECT_PAT_FILL
|
||||
SVGA_CMD_RECT_PIXMAP_FILL SVGA_CAP_RECT_PAT_FILL
|
||||
SVGA_CMD_RECT_BITMAP_COPY SVGA_CAP_RECT_PAT_FILL
|
||||
SVGA_CMD_RECT_PIXMAP_COPY SVGA_CAP_RECT_PAT_FILL
|
||||
SVGA_CMD_FREE_OBJECT SVGA_CAP_OFFSCREEN
|
||||
SVGA_CMD_RECT_ROP_FILL SVGA_CAP_RECT_FILL +
|
||||
SVGA_CAP_RASTER_OP
|
||||
SVGA_CMD_RECT_ROP_COPY SVGA_CAP_RECT_COPY +
|
||||
SVGA_CAP_RASTER_OP
|
||||
SVGA_CMD_RECT_ROP_BITMAP_FILL SVGA_CAP_RECT_PAT_FILL +
|
||||
SVGA_CAP_RASTER_OP
|
||||
SVGA_CMD_RECT_ROP_PIXMAP_FILL SVGA_CAP_RECT_PAT_FILL +
|
||||
SVGA_CAP_RASTER_OP
|
||||
SVGA_CMD_RECT_ROP_BITMAP_COPY SVGA_CAP_RECT_PAT_FILL +
|
||||
SVGA_CAP_RASTER_OP
|
||||
SVGA_CMD_RECT_ROP_PIXMAP_COPY SVGA_CAP_RECT_PAT_FILL +
|
||||
SVGA_CAP_RASTER_OP
|
||||
SVGA_CMD_DEFINE_CURSOR SVGA_CAP_CURSOR
|
||||
SVGA_CMD_DISPLAY_CURSOR SVGA_CAP_CURSOR
|
||||
SVGA_CMD_MOVE_CURSOR SVGA_CAP_CURSOR
|
||||
SVGA_CMD_DEFINE_ALPHA_CURSOR SVGA_CAP_ALPHA_CURSOR
|
||||
SVGA_CMD_DRAW_GLYPH SVGA_CAP_GLYPH
|
||||
SVGA_CMD_DRAW_GLYPH_CLIPPED SVGA_CAP_GLYPH_CLIPPING
|
||||
SVGA_CMD_ESCAPE SVGA_FIFO_CAP_ESCAPE
|
||||
|
||||
Note: SVGA_CMD_DISPLAY_CURSOR and SVGA_CMD_MOVE_CURSOR should not be used.
|
||||
Drivers wishing hardware cursor support should use cursor bypass (see below).
|
||||
|
||||
Other capabilities indicate other functionality as described below:
|
||||
|
||||
SVGA_CAP_CURSOR_BYPASS
|
||||
The hardware cursor can be drawn via SVGA Registers (without requiring
|
||||
the FIFO be synchronized and will be drawn potentially before any
|
||||
outstanding unprocessed FIFO commands).
|
||||
|
||||
Note: Without SVGA_CAP_CURSOR_BYPASS_2, cursors drawn this way still
|
||||
appear in the guest's framebuffer and need to be turned off before any
|
||||
save under / overlapping drawing and turned back on after. This can
|
||||
cause very noticeable cursor flicker.
|
||||
|
||||
SVGA_CAP_CURSOR_BYPASS_2
|
||||
Instead of turning the cursor off and back on around any overlapping
|
||||
drawing, the driver can write SVGA_CURSOR_ON_REMOVE_FROM_FB and
|
||||
SVGA_CURSOR_ON_RESTORE_TO_FB to SVGA_REG_CURSOR_ON. In almost all
|
||||
cases these are NOPs and the cursor will be remain visible without
|
||||
appearing in the guest framebuffer. In 'direct graphics' modes like
|
||||
Linux host fullscreen local displays, however, the cursor will still
|
||||
be drawn in the framebuffer, still flicker, and be drawn incorrectly
|
||||
if a driver does not use SVGA_CURSOR_ON_REMOVE_FROM_FB / RESTORE_TO_FB.
|
||||
|
||||
SVGA_CAP_8BIT_EMULATION
|
||||
SVGA_REG_BITS_PER_PIXEL is writable and can be set to either 8 or
|
||||
SVGA_REG_HOST_BITS_PER_PIXEL. Otherwise the only SVGA modes available
|
||||
inside a virtual machine must match the host's bits per pixel.
|
||||
|
||||
Note: Some versions which lack SVGA_CAP_8BIT_EMULATION also lack the
|
||||
SVGA_REG_HOST_BITS_PER_PIXEL and a driver should assume
|
||||
SVGA_REG_BITS_PER_PIXEL is both read-only and initialized to the only
|
||||
available value if SVGA_CAP_8BIT_EMULATION is not set.
|
||||
|
||||
SVGA_CAP_OFFSCREEN_1
|
||||
SVGA_CMD_RECT_FILL, SVGA_CMD_RECT_COPY, SVGA_CMD_RECT_ROP_FILL,
|
||||
SVGA_CMD_RECT_ROP_COPY can operate with a source or destination (or
|
||||
both) in offscreen memory.
|
||||
|
||||
Usable offscreen memory is a rectangle located below the last scanline
|
||||
of the visible memory:
|
||||
x1 = 0
|
||||
y1 = (SVGA_REG_FB_SIZE + SVGA_REG_BYTES_PER_LINE - 1) /
|
||||
SVGA_REG_BYTES_PER_LINE
|
||||
x2 = SVGA_REG_BYTES_PER_LINE / SVGA_REG_DEPTH
|
||||
y2 = SVGA_REG_VRAM_SIZE / SVGA_REG_BYTES_PER_LINE
|
||||
|
||||
|
||||
Cursor Handling
|
||||
---------------
|
||||
|
||||
Starting with GSX Server Beta 3 (after 11/15/2000), hardware cursor support
|
||||
was added. Actually, both a hardware cursor via the FIFO (SVGA_CAP_CURSOR)
|
||||
and a hardware cursor via the SVGA registers (SVGA_CAP_CURSOR_BYPASS) were
|
||||
added. SVGA_CAP_CURSOR was never available without SVGA_CAP_CURSOR_BYPASS and
|
||||
the FIFO hardware cursor should never be used and may be removed without
|
||||
warning in the future.
|
||||
|
||||
Cursor bypass is programmed using the two FIFO commands SVGA_CMD_DEFINE_CURSOR
|
||||
and SVGA_CMD_DEFINE_ALPHA_CURSOR in conjunction with the SVGA registers
|
||||
SVGA_REG_CURSOR_ID, SVGA_REG_CURSOR_X, SVGA_REG_CURSOR_Y, and
|
||||
SVGA_REG_CURSOR_ON.
|
||||
|
||||
A driver defines an AND/XOR hardware cursor using SVGA_CMD_DEFINE_CURSOR to
|
||||
assign an ID and establish the AND and XOR masks with the hardware. A driver
|
||||
uses SVGA_CMD_DEFINE_ALPHA_CURSOR to define a 32 bit mask whose top 8 bits are
|
||||
used to blend the cursor image with the pixels it covers. Alpha cursor
|
||||
support is only available when SVGA_CAP_ALPHA_CURSOR is set.
|
||||
|
||||
Once a cursor is defined, a driver can draw it to the screen at any time by
|
||||
writing the SVGA_REG_CURSOR_ID register with the ID used when the cursor was
|
||||
defined, writing SVGA_REG_CURSOR_X and SVGA_REG_CURSOR_Y with the location of
|
||||
the cursor, and SVGA_CURSOR_ON_SHOW to SVGA_REG_CURSOR_ON. The drawing occurs
|
||||
when SVGA_REG_CURSOR_ON is written.
|
||||
|
||||
Writing SVGA_CURSOR_ON_HIDE to SVGA_REG_CURSOR_ON will turn the cursor off and
|
||||
make it vanish from the display and, if present, from the framebuffer.
|
||||
SVGA_CURSOR_ON_REMOVE_FROM_FB will ensure the cursor is not in the
|
||||
framebuffer, but will only turn it off if there's no other way to remove it.
|
||||
SVGA_CURSOR_ON_RESTORE_TO_FB is the complement to
|
||||
SVGA_CURSOR_ON_REMOVE_FROM_FB. Whenever possible, the device will not put the
|
||||
cursor in the framebuffer and Remove From / Restore To will be NOPs.
|
||||
|
||||
Note: The cursor must be out of the frame buffer before the driver (or any
|
||||
agent in the virtual machine) touches an overlapping portion of the frame
|
||||
buffer, because it is actually drawn into the frame buffer memory in the
|
||||
case of direct graphics mode (e.g. full screen mode on Linux). The cursor
|
||||
does not have to be touched before issuing an accelerated command via the
|
||||
command FIFO, this case is handled by the SVGA device.
|
||||
|
||||
Note: If SVGA_CAP_CURSOR_BYPASS2 is not present, the driver must use
|
||||
SVGA_CURSOR_ON_HIDE and SVGA_CURSOR_ON_HIDE to be certain the cursor is out of
|
||||
the framebuffer.
|
||||
|
||||
|
||||
Driver Version Numbers
|
||||
----------------------
|
||||
|
||||
The SVGA drivers use the following convention for their version numbers:
|
||||
|
||||
Version 10.0 - The first version that uses the FIFO
|
||||
Version 10.1 - The version that uses the hardware cursor emulation via the FIFO
|
||||
Version 10.2 - The version that uses the cursor that bypasses the FIFO
|
||||
Version 10.3 - The version that can also support the 0405 chipset
|
||||
Version 10.4 - The version that knows about SVGA_CAP_CURSOR_BYPASS2
|
||||
Version 10.5 - [Never released or well defined]
|
||||
Version 10.6 - The version that knows about SVGA_CAP_8BIT_EMULATION
|
||||
Version 10.7 - The version that knows about SVGA_CAP_ALPHA_CURSOR
|
||||
Version 10.8 - The version that knows about SVGA_CAP_GLYPH
|
||||
Version 10.9 - The version that knows about SVGA_CAP_OFFSCREEN_1
|
||||
|
||||
Note that this is merely the convention used by SVGA drivers written and
|
||||
maintained by VMware, Inc. and describes the capabilities of the driver, not
|
||||
the virtual hardware. An SVGA driver can only use the intersection of the
|
||||
functionality it supports and the functionality available in the virtual SVGA
|
||||
hardware.
|
||||
|
||||
|
||||
Frequently Asked Questions
|
||||
--------------------------
|
||||
|
||||
1. My driver doesn't display anything, what's going on?
|
||||
|
||||
First check if you are issuing an SVGA_CMD_UPDATE after drawing to
|
||||
the screen. Another check you can do is to run your driver in full
|
||||
screen mode on a Linux host. In this case you are drawing directly
|
||||
on the frame buffer, so what you draw to the screen will be immediately
|
||||
visible. If nothing is visible in this case, then most likely your
|
||||
driver hasn't mapped the frame buffer correctly.
|
||||
|
||||
A discrepancy between what you get in full screen mode and what you
|
||||
get in window mode indicates that you have a missing or incorrect
|
||||
update command.
|
||||
|
||||
|
||||
2. What's the difference between bitmaps and pixmaps?
|
||||
|
||||
Pixmaps have the same depth as the screen, while bitmaps have depth one.
|
||||
When a bitmap is drawn, the command also takes two colors, foreground and
|
||||
background. The set bits in the bitmap are replaced with the foreground
|
||||
color, and the unset bits are replaced with the background color.
|
||||
|
||||
Pixmaps, on the other hand, can be directly copied to the screen.
|
||||
|
||||
|
||||
3. What's the significance of the ROP in the commands SVGA_CMD_RECT_ROP_FILL,
|
||||
SVGA_CMD_RECT_ROP_BITMAP_COPY, etc. ?
|
||||
|
||||
The ROP in the ...ROP... commands is a raster operation. It has the same
|
||||
significance (and encoding) as it does in X. The ROP value SVGA_ROP_COPY
|
||||
means the source is copied to the destination, which makes these commands the
|
||||
same as their non-ROP counterparts. The most commonly used raster operation
|
||||
other than copy is probably SVGA_ROP_XOR, which combines the source and
|
||||
destination using exclusive-or.
|
||||
|
||||
|
||||
4. Tell me more about bitmaps and pixmaps. For example, the macro
|
||||
SVGA_CMD_DEFINE_BITMAP has a field <scanlines>. What should this be
|
||||
set to? Likewise with SVGA_CMD_DEFINE_PIXMAP. And when should the
|
||||
SCANLINE macros be used?
|
||||
|
||||
OK, I'll use pixmaps as an example. First you have to define the pixmap:
|
||||
|
||||
#define SVGA_CMD_DEFINE_PIXMAP 6
|
||||
/* FIFO layout:
|
||||
Pixmap ID, Width, Height, Depth, <scanlines> */
|
||||
|
||||
The ID is something you choose, which you subsequently use to refer to
|
||||
this pixmap. It must be an integer between 0 and SVGA_MAX_ID.
|
||||
|
||||
The width and height and depth are the dimensions of the pixmap. For now,
|
||||
the depth of the pixmap has to match the depth of the screen.
|
||||
|
||||
The scanlines are the pixels that make up the pixmap, arranged one row
|
||||
at a time. Each row is required to be 32-bit aligned. The macros
|
||||
SVGA_PIXMAP_SCANLINE_SIZE and SVGA_PIXMAP_SIZE give the size of a
|
||||
single scanline, and the size of the entire pixmap, respectively, in
|
||||
32-bit words.
|
||||
|
||||
The second step is to use it:
|
||||
|
||||
#define SVGA_CMD_RECT_PIXMAP_FILL 9
|
||||
/* FIFO layout:
|
||||
Pixmap ID, X, Y, Width, Height */
|
||||
|
||||
The ID here is the one you chose when defining the pixmap. X, Y,
|
||||
Width, and Height define a rectangle on the screen that is to be filled
|
||||
with the pixmap. The pixmap is screen aligned, which means that the
|
||||
coordinates in the pixmap are defined by the screen coordinates modulo
|
||||
the pixmap dimensions.
|
||||
|
||||
If you want a different alignment between the screen and the pixmap,
|
||||
then you can use this command, which allows the pixmap coordinates to
|
||||
be defined:
|
||||
|
||||
#define SVGA_CMD_RECT_PIXMAP_COPY 11
|
||||
/* FIFO layout:
|
||||
Pixmap ID, Source X, Source Y, Dest X, Dest Y, Width,
|
||||
Height */
|
||||
|
||||
The Source X and Source Y are pixmap coordinates, and the Dest X and
|
||||
Dest Y are screen coordinates.
|
||||
|
||||
|
||||
5. OK, now it works briefly, then stops displaying anything. Also,
|
||||
my log file is filled with lines like:
|
||||
Unknown Command 0xff in SVGA command FIFO
|
||||
What's happening?
|
||||
|
||||
The most common problem at this point is that the FIFO gets out
|
||||
of sync. This can happen if the amount of data in the FIFO doesn't
|
||||
match what the VMware SVGA device expects. To track this down, try
|
||||
to isolate the particular command which causes the problem.
|
||||
|
||||
Another way this can happen is if the wraparound in the FIFO isn't
|
||||
done correctly. Here is some example code for writing to the FIFO
|
||||
(mem is an array of 32-bit integers that points to the FIFO memory
|
||||
region):
|
||||
|
||||
while (TRUE) {
|
||||
fifo_min = mem[SVGA_FIFO_MIN] / 4;
|
||||
fifo_max = mem[SVGA_FIFO_MAX] / 4;
|
||||
fifo_next = mem[SVGA_FIFO_NEXT_CMD] / 4;
|
||||
fifo_stop = mem[SVGA_FIFO_STOP] / 4;
|
||||
|
||||
tmp_next = fifo_next+1;
|
||||
if (tmp_next == fifo_max)
|
||||
tmp_next = fifo_min; // Wraparound
|
||||
|
||||
if (tmp_next == fifo_stop) {
|
||||
sync_fifo(); // FIFO full
|
||||
continue; // retry
|
||||
}
|
||||
|
||||
mem[fifo_next] = item;
|
||||
mem[SVGA_FIFO_NEXT_CMD] = tmp_next * 4;
|
||||
break;
|
||||
}
|
||||
|
||||
This isn't the most efficient code, but it should work. It's important
|
||||
to do the increment with wraparound before the FIFO full check, and to
|
||||
check FIFO full before updating the next command pointer.
|
||||
|
||||
|
||||
6. My driver tries to switch modes and either nothing happens or the
|
||||
display becomes completely garbled. What's going on?
|
||||
|
||||
When you change modes, make very sure you reread all of the registers listed
|
||||
above under SetMode. Getting the pitch (SVGA_REG_BYTES_PER_LINE) incorrect
|
||||
will cause a heavily garbled display. Also, if you change
|
||||
SVGA_REG_BITS_PER_PIXEL, make certain that SVGA_CAP_8BIT_EMULATION is present
|
||||
in the SVGA_REG_CAPABILITIES register. Also, even with 8 bit emulation, the
|
||||
driver must still use either 8 bpp or SVGA_REG_HOST_BITS_PER_PIXEL bpp,
|
||||
nothing else.
|
||||
|
||||
|
||||
7. Why does my driver's hardware cursor work when my virtual machine is in
|
||||
window mode, but draw/erase incorrectly or in garbled locations in fullscreen
|
||||
mode?
|
||||
|
||||
You need to make sure you use SVGA_CURSOR_ON_REMOVE_FROM_FB and
|
||||
SVGA_CURSOR_ON_RESTORE_TO_FB _every_ time your driver or the virtual machine
|
||||
touches a region of the framebuffer that overlaps the cursor. If you forget
|
||||
to remove it then it can show up when doing save-under operations or get mixed
|
||||
in with other drawing. If you forget to restore it then can disappear. You
|
||||
also need to make sure SVGA_CAP_CURSOR_BYPASS2 is available, or else you will
|
||||
have to use SVGA_CURSOR_ON_SHOW and SVGA_CURSOR_ON_HIDE (which will flicker,
|
||||
even in window mode), or else a software cursor. Newer version of the virtual
|
||||
SVGA hardware will never put the hardware cursor in the framebuffer while in
|
||||
window mode, so everything will appear to work correctly there.
|
||||
|
||||
|
||||
8. Why do my accelerated glyphs look funny? OR Why does the fifo complain
|
||||
about invalid commands when I draw accelerated glyphs?
|
||||
|
||||
The bitmap data passed to SVGA_CMD_DRAW_GLYPH_* must not have any per-scanline
|
||||
alignment. If there are any remaining bits left in the last byte of a scanline,
|
||||
the first bits of the next scanline should use them.
|
||||
|
||||
The bitmap data as a whole must be 4 byte aligned.
|
||||
|
||||
$XFree86: xc/programs/Xserver/hw/xfree86/drivers/vmware/README,v 1.5 2002/10/16 22:12:53 alanh Exp $
|
||||
--
|
||||
|
155
driver/xf86-video-vmware/aclocal.m4
vendored
155
driver/xf86-video-vmware/aclocal.m4
vendored
@ -7631,6 +7631,7 @@ AC_SUBST([am__tar])
|
||||
AC_SUBST([am__untar])
|
||||
]) # _AM_PROG_TAR
|
||||
|
||||
dnl xorg-macros.m4. Generated from xorg-macros.m4.in:xorgversion.m4 by configure.
|
||||
dnl
|
||||
dnl Copyright 2005-2006 Sun Microsystems, Inc. All rights reserved.
|
||||
dnl
|
||||
@ -7678,7 +7679,7 @@ AC_DEFUN([XORG_MACROS_VERSION],[
|
||||
XORG_MACROS_needed_major=`echo $XORG_MACROS_needed_version | sed 's/\..*$//'`
|
||||
XORG_MACROS_needed_minor=`echo $XORG_MACROS_needed_version | sed -e 's/^[0-9]*\.//' -e 's/\..*$//'`]
|
||||
AC_MSG_CHECKING([if xorg-macros used to generate configure is at least ${XORG_MACROS_needed_major}.${XORG_MACROS_needed_minor}])
|
||||
[XORG_MACROS_version=1.1.6
|
||||
[XORG_MACROS_version=1.2.1
|
||||
XORG_MACROS_major=`echo $XORG_MACROS_version | sed 's/\..*$//'`
|
||||
XORG_MACROS_minor=`echo $XORG_MACROS_version | sed -e 's/^[0-9]*\.//' -e 's/\..*$//'`]
|
||||
if test $XORG_MACROS_major -ne $XORG_MACROS_needed_major ; then
|
||||
@ -7712,6 +7713,10 @@ else
|
||||
if test `${RAWCPP} -undef < conftest.$ac_ext | grep -c 'unix'` -eq 1 ; then
|
||||
RAWCPPFLAGS=-undef
|
||||
AC_MSG_RESULT([yes])
|
||||
# under Cygwin unix is still defined even with -undef
|
||||
elif test `${RAWCPP} -undef -ansi < conftest.$ac_ext | grep -c 'unix'` -eq 1 ; then
|
||||
RAWCPPFLAGS="-undef -ansi"
|
||||
AC_MSG_RESULT([yes, with -ansi])
|
||||
else
|
||||
AC_MSG_ERROR([${RAWCPP} defines unix with or without -undef. I don't know what to do.])
|
||||
fi
|
||||
@ -7824,7 +7829,9 @@ AC_SUBST([ADMIN_MAN_DIR])
|
||||
# Whether or not the necessary tools and files are found can be checked
|
||||
# with the AM_CONDITIONAL "BUILD_LINUXDOC"
|
||||
AC_DEFUN([XORG_CHECK_LINUXDOC],[
|
||||
XORG_SGML_PATH=$prefix/share/sgml
|
||||
if test x$XORG_SGML_PATH = x ; then
|
||||
XORG_SGML_PATH=$prefix/share/sgml
|
||||
fi
|
||||
HAVE_DEFS_ENT=
|
||||
|
||||
if test x"$cross_compiling" = x"yes" ; then
|
||||
@ -7880,7 +7887,9 @@ AC_SUBST(MAKE_HTML)
|
||||
# indicates whether the necessary tools and files are found and, if set,
|
||||
# $(MAKE_XXX) blah.sgml will produce blah.xxx.
|
||||
AC_DEFUN([XORG_CHECK_DOCBOOK],[
|
||||
XORG_SGML_PATH=$prefix/share/sgml
|
||||
if test x$XORG_SGML_PATH = x ; then
|
||||
XORG_SGML_PATH=$prefix/share/sgml
|
||||
fi
|
||||
HAVE_DEFS_ENT=
|
||||
BUILDTXTDOC=no
|
||||
BUILDPDFDOC=no
|
||||
@ -8057,55 +8066,31 @@ AM_CONDITIONAL(MAKE_LINT_LIB, [test x$make_lint_lib != xno])
|
||||
|
||||
]) # XORG_LINT_LIBRARY
|
||||
|
||||
dnl Copyright 2005 Red Hat, Inc
|
||||
dnl
|
||||
dnl Permission to use, copy, modify, distribute, and sell this software and its
|
||||
dnl documentation for any purpose is hereby granted without fee, provided that
|
||||
dnl the above copyright notice appear in all copies and that both that
|
||||
dnl copyright notice and this permission notice appear in supporting
|
||||
dnl documentation.
|
||||
dnl
|
||||
dnl The above copyright notice and this permission notice shall be included
|
||||
dnl in all copies or substantial portions of the Software.
|
||||
dnl
|
||||
dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
dnl OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
dnl MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
dnl IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
dnl OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
dnl ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
dnl OTHER DEALINGS IN THE SOFTWARE.
|
||||
dnl
|
||||
dnl Except as contained in this notice, the name of the copyright holders shall
|
||||
dnl not be used in advertising or otherwise to promote the sale, use or
|
||||
dnl other dealings in this Software without prior written authorization
|
||||
dnl from the copyright holders.
|
||||
dnl
|
||||
|
||||
# XORG_DRIVER_CHECK_EXT()
|
||||
# --------------------------
|
||||
# Checks for the $1 define in xorg-server.h (from the sdk). If it
|
||||
# is defined, then add $1 to $REQUIRED_MODULES.
|
||||
|
||||
AC_DEFUN([XORG_DRIVER_CHECK_EXT],[
|
||||
SAVE_CFLAGS="$CFLAGS"
|
||||
CFLAGS="$CFLAGS -I`pkg-config --variable=sdkdir xorg-server`"
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
||||
#include "xorg-server.h"
|
||||
#if !defined $1
|
||||
#error $1 not defined
|
||||
#endif
|
||||
]])],
|
||||
[_EXT_CHECK=yes],
|
||||
[_EXT_CHECK=no])
|
||||
CFLAGS="$SAVE_CFLAGS"
|
||||
AC_MSG_CHECKING([if $1 is defined])
|
||||
AC_MSG_RESULT([$_EXT_CHECK])
|
||||
if test "$_EXT_CHECK" != no; then
|
||||
REQUIRED_MODULES="$REQUIRED_MODULES $2"
|
||||
fi
|
||||
])
|
||||
|
||||
# XORG_CWARNFLAGS
|
||||
# ---------------
|
||||
# Minimum version: 1.2.0
|
||||
#
|
||||
# Defines CWARNFLAGS to enable C compiler warnings.
|
||||
#
|
||||
AC_DEFUN([XORG_CWARNFLAGS], [
|
||||
AC_REQUIRE([AC_PROG_CC])
|
||||
if test "x$GCC" = xyes ; then
|
||||
CWARNFLAGS="-Wall -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes \
|
||||
-Wmissing-declarations -Wnested-externs -fno-strict-aliasing \
|
||||
-Wbad-function-cast"
|
||||
case `gcc -dumpversion` in
|
||||
3.4.* | 4.*)
|
||||
CWARNFLAGS+=" -Wold-style-definition -Wdeclaration-after-statement"
|
||||
;;
|
||||
esac
|
||||
else
|
||||
AC_CHECK_DECL([__SUNPRO_C], [SUNCC="yes"], [SUNCC="no"])
|
||||
if test "x$SUNCC" = "xyes"; then
|
||||
CWARNFLAGS="-v"
|
||||
fi
|
||||
fi
|
||||
AC_SUBST(CWARNFLAGS)
|
||||
]) # XORG_CWARNFLAGS
|
||||
dnl Copyright 2005 Red Hat, Inc
|
||||
dnl
|
||||
dnl Permission to use, copy, modify, distribute, and sell this software and its
|
||||
@ -8168,3 +8153,69 @@ AC_DEFUN([XORG_RELEASE_VERSION],[
|
||||
[Patch version of this package])
|
||||
])
|
||||
|
||||
# XORG_CHANGELOG()
|
||||
# ----------------
|
||||
# Minimum version: 1.2.0
|
||||
#
|
||||
# Defines the variable CHANGELOG_CMD as the command to generate
|
||||
# ChangeLog from git.
|
||||
#
|
||||
# Arrange that distcleancheck ignores ChangeLog left over by distclean.
|
||||
#
|
||||
AC_DEFUN([XORG_CHANGELOG], [
|
||||
CHANGELOG_CMD="(GIT_DIR=\$(top_srcdir)/.git git log > .changelog.tmp && \
|
||||
mv .changelog.tmp ChangeLog) || (rm -f .changelog.tmp; touch ChangeLog; \
|
||||
echo 'git directory not found: installing possibly empty changelog.' >&2)"
|
||||
AC_SUBST([CHANGELOG_CMD])
|
||||
AC_SUBST([distcleancheck_listfiles], ['find . -type f ! -name ChangeLog -print'])
|
||||
]) # XORG_CHANGELOG
|
||||
|
||||
dnl Copyright 2005 Red Hat, Inc
|
||||
dnl
|
||||
dnl Permission to use, copy, modify, distribute, and sell this software and its
|
||||
dnl documentation for any purpose is hereby granted without fee, provided that
|
||||
dnl the above copyright notice appear in all copies and that both that
|
||||
dnl copyright notice and this permission notice appear in supporting
|
||||
dnl documentation.
|
||||
dnl
|
||||
dnl The above copyright notice and this permission notice shall be included
|
||||
dnl in all copies or substantial portions of the Software.
|
||||
dnl
|
||||
dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
dnl OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
dnl MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
dnl IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
dnl OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
dnl ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
dnl OTHER DEALINGS IN THE SOFTWARE.
|
||||
dnl
|
||||
dnl Except as contained in this notice, the name of the copyright holders shall
|
||||
dnl not be used in advertising or otherwise to promote the sale, use or
|
||||
dnl other dealings in this Software without prior written authorization
|
||||
dnl from the copyright holders.
|
||||
dnl
|
||||
|
||||
# XORG_DRIVER_CHECK_EXT()
|
||||
# --------------------------
|
||||
# Checks for the $1 define in xorg-server.h (from the sdk). If it
|
||||
# is defined, then add $1 to $REQUIRED_MODULES.
|
||||
|
||||
AC_DEFUN([XORG_DRIVER_CHECK_EXT],[
|
||||
SAVE_CFLAGS="$CFLAGS"
|
||||
CFLAGS="$CFLAGS -I`pkg-config --variable=sdkdir xorg-server`"
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
||||
#include "xorg-server.h"
|
||||
#if !defined $1
|
||||
#error $1 not defined
|
||||
#endif
|
||||
]])],
|
||||
[_EXT_CHECK=yes],
|
||||
[_EXT_CHECK=no])
|
||||
CFLAGS="$SAVE_CFLAGS"
|
||||
AC_MSG_CHECKING([if $1 is defined])
|
||||
AC_MSG_RESULT([$_EXT_CHECK])
|
||||
if test "$_EXT_CHECK" != no; then
|
||||
REQUIRED_MODULES="$REQUIRED_MODULES $2"
|
||||
fi
|
||||
])
|
||||
|
||||
|
@ -38,6 +38,9 @@
|
||||
/* Has version 1.1.0 or greater of the Xserver */
|
||||
#undef HAVE_XORG_SERVER_1_1_0
|
||||
|
||||
/* Has version 1.2.0 or greater of the Xserver */
|
||||
#undef HAVE_XORG_SERVER_1_2_0
|
||||
|
||||
/* Name of package */
|
||||
#undef PACKAGE
|
||||
|
||||
|
9320
driver/xf86-video-vmware/configure
vendored
9320
driver/xf86-video-vmware/configure
vendored
File diff suppressed because it is too large
Load Diff
@ -22,7 +22,7 @@
|
||||
|
||||
AC_PREREQ(2.57)
|
||||
AC_INIT([xf86-video-vmware],
|
||||
10.16.5,
|
||||
10.16.6,
|
||||
[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
|
||||
xf86-video-vmware)
|
||||
|
||||
@ -66,6 +66,11 @@ PKG_CHECK_EXISTS([xorg-server >= 1.0.99.901],
|
||||
[AC_DEFINE([HAVE_XORG_SERVER_1_0_99_901], 1,
|
||||
[Has version 1.0.99.901 or greater of the Xserver])])
|
||||
|
||||
PKG_CHECK_EXISTS([xorg-server >= 1.2.0],
|
||||
[AC_DEFINE([HAVE_XORG_SERVER_1_2_0], 1,
|
||||
[Has version 1.2.0 or greater of the Xserver])])
|
||||
|
||||
|
||||
# Checks for libraries.
|
||||
|
||||
# Checks for header files.
|
||||
|
@ -2127,17 +2127,6 @@ EOF
|
||||
;;
|
||||
esac
|
||||
for pass in $passes; do
|
||||
# The preopen pass in lib mode reverses $deplibs; put it back here
|
||||
# so that -L comes before libs that need it for instance...
|
||||
if test "$linkmode,$pass" = "lib,link"; then
|
||||
## FIXME: Find the place where the list is rebuilt in the wrong
|
||||
## order, and fix it there properly
|
||||
tmp_deplibs=
|
||||
for deplib in $deplibs; do
|
||||
tmp_deplibs="$deplib $tmp_deplibs"
|
||||
done
|
||||
deplibs="$tmp_deplibs"
|
||||
fi
|
||||
if test "$linkmode,$pass" = "lib,link" ||
|
||||
test "$linkmode,$pass" = "prog,scan"; then
|
||||
libs="$deplibs"
|
||||
|
@ -122,6 +122,7 @@ F77 = @F77@
|
||||
FFLAGS = @FFLAGS@
|
||||
FILE_MAN_DIR = @FILE_MAN_DIR@
|
||||
FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
|
||||
GREP = @GREP@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
@ -162,15 +163,9 @@ XORG_CFLAGS = @XORG_CFLAGS@
|
||||
XORG_LIBS = @XORG_LIBS@
|
||||
XSERVER_LIBPCIACCESS_FALSE = @XSERVER_LIBPCIACCESS_FALSE@
|
||||
XSERVER_LIBPCIACCESS_TRUE = @XSERVER_LIBPCIACCESS_TRUE@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_DSYMUTIL = @ac_ct_DSYMUTIL@
|
||||
ac_ct_F77 = @ac_ct_F77@
|
||||
ac_ct_NMEDIT = @ac_ct_NMEDIT@
|
||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||
ac_ct_STRIP = @ac_ct_STRIP@
|
||||
ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
||||
@ -187,24 +182,31 @@ build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
moduledir = @moduledir@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
|
@ -38,6 +38,6 @@ and will not be overridden at runtime.
|
||||
The format is "Width1xHeight1+Xoffset1+Yoffset1;Width2xHeight2+Xoffset2+Yoffset2"
|
||||
and so on. Negative offsets are not supported.
|
||||
.SH "SEE ALSO"
|
||||
__xservername__(__appmansuffix__), __xconfigfile__(__filemansuffix__), xorgconfig(__appmansuffix__), Xserver(__appmansuffix__), X(__miscmansuffix__)
|
||||
__xservername__(__appmansuffix__), __xconfigfile__(__filemansuffix__), Xserver(__appmansuffix__), X(__miscmansuffix__)
|
||||
.SH AUTHORS
|
||||
Copyright (c) 1999-2007 VMware, Inc.
|
||||
|
@ -48,5 +48,6 @@ vmware_drv_la_SOURCES = \
|
||||
vmwarectrl.h \
|
||||
vmwarectrlproto.h \
|
||||
vmwarexinerama.c \
|
||||
vmwarevideo.c
|
||||
vmwarevideo.c \
|
||||
vmwaremodes.c
|
||||
|
||||
|
@ -76,7 +76,7 @@ vmware_drv_laLTLIBRARIES_INSTALL = $(INSTALL)
|
||||
LTLIBRARIES = $(vmware_drv_la_LTLIBRARIES)
|
||||
vmware_drv_la_LIBADD =
|
||||
am_vmware_drv_la_OBJECTS = bits2pixels.lo vmware.lo vmwarecurs.lo \
|
||||
vmwarectrl.lo vmwarexinerama.lo vmwarevideo.lo
|
||||
vmwarectrl.lo vmwarexinerama.lo vmwarevideo.lo vmwaremodes.lo
|
||||
vmware_drv_la_OBJECTS = $(am_vmware_drv_la_OBJECTS)
|
||||
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
@ -133,6 +133,7 @@ F77 = @F77@
|
||||
FFLAGS = @FFLAGS@
|
||||
FILE_MAN_DIR = @FILE_MAN_DIR@
|
||||
FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
|
||||
GREP = @GREP@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
@ -173,15 +174,9 @@ XORG_CFLAGS = @XORG_CFLAGS@
|
||||
XORG_LIBS = @XORG_LIBS@
|
||||
XSERVER_LIBPCIACCESS_FALSE = @XSERVER_LIBPCIACCESS_FALSE@
|
||||
XSERVER_LIBPCIACCESS_TRUE = @XSERVER_LIBPCIACCESS_TRUE@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_DSYMUTIL = @ac_ct_DSYMUTIL@
|
||||
ac_ct_F77 = @ac_ct_F77@
|
||||
ac_ct_NMEDIT = @ac_ct_NMEDIT@
|
||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||
ac_ct_STRIP = @ac_ct_STRIP@
|
||||
ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
||||
@ -198,24 +193,31 @@ build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
moduledir = @moduledir@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
@ -250,7 +252,8 @@ vmware_drv_la_SOURCES = \
|
||||
vmwarectrl.h \
|
||||
vmwarectrlproto.h \
|
||||
vmwarexinerama.c \
|
||||
vmwarevideo.c
|
||||
vmwarevideo.c \
|
||||
vmwaremodes.c
|
||||
|
||||
all: all-am
|
||||
|
||||
@ -325,6 +328,7 @@ distclean-compile:
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vmware.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vmwarectrl.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vmwarecurs.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vmwaremodes.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vmwarevideo.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vmwarexinerama.Plo@am__quote@
|
||||
|
||||
|
@ -83,7 +83,7 @@ char rcsId_vmware[] =
|
||||
#define VMWARE_DRIVER_NAME "vmware"
|
||||
#define VMWARE_MAJOR_VERSION 10
|
||||
#define VMWARE_MINOR_VERSION 16
|
||||
#define VMWARE_PATCHLEVEL 5
|
||||
#define VMWARE_PATCHLEVEL 6
|
||||
#define VMWARE_DRIVER_VERSION \
|
||||
(VMWARE_MAJOR_VERSION * 65536 + VMWARE_MINOR_VERSION * 256 + VMWARE_PATCHLEVEL)
|
||||
#define VMWARE_DRIVER_VERSION_STRING \
|
||||
@ -921,6 +921,11 @@ VMWAREPreInit(ScrnInfoPtr pScrn, int flags)
|
||||
clockRanges->doubleScanAllowed = FALSE;
|
||||
clockRanges->ClockMulFactor = 1;
|
||||
clockRanges->ClockDivFactor = 1;
|
||||
|
||||
/*
|
||||
* Get the default supported modelines
|
||||
*/
|
||||
vmwareGetSupportedModelines(&pScrn->monitor->Modes);
|
||||
|
||||
i = xf86ValidateModes(pScrn, pScrn->monitor->Modes, pScrn->display->modes,
|
||||
clockRanges, NULL, 256, pVMWARE->maxWidth, 32 * 32,
|
||||
@ -1779,8 +1784,7 @@ VMWAREScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
|
||||
* We will lazily add the dynamic modes as the are needed when new
|
||||
* modes are requested through the control extension.
|
||||
*/
|
||||
pVMWARE->dynMode1 = NULL;
|
||||
pVMWARE->dynMode2 = NULL;
|
||||
memset(&pVMWARE->dynModes, 0, sizeof pVMWARE->dynModes);
|
||||
|
||||
#if VMWARE_DRIVER_FUNC
|
||||
pScrn->DriverFunc = VMWareDriverFunc;
|
||||
|
@ -43,8 +43,17 @@
|
||||
#include "svga_reg.h"
|
||||
#include "svga_struct.h"
|
||||
|
||||
/* Arbitrarily choose max cursor dimensions. The emulation doesn't care. */
|
||||
#define MAX_CURS 32
|
||||
/*
|
||||
* The virtual hardware's cursor limits are pretty big. Some VMware
|
||||
* product versions limit to 1024x1024 pixels, others limit to 128
|
||||
* kilobytes of cursor data. We just choose an arbitrary maximum
|
||||
* cursor size. 64x64 is a common value for real hardware, so we'll go
|
||||
* with that.
|
||||
*/
|
||||
#define MAX_CURS 64
|
||||
|
||||
#define NUM_DYN_MODES 2
|
||||
|
||||
|
||||
typedef struct {
|
||||
CARD32 svga_reg_enable;
|
||||
@ -94,8 +103,7 @@ typedef struct {
|
||||
VMWARERegRec SavedReg;
|
||||
VMWARERegRec ModeReg;
|
||||
|
||||
DisplayModePtr dynMode1;
|
||||
DisplayModePtr dynMode2;
|
||||
DisplayModePtr dynModes[NUM_DYN_MODES];
|
||||
|
||||
Bool* pvtSema;
|
||||
|
||||
@ -294,4 +302,8 @@ void vmwareCheckVideoSanity(
|
||||
ScrnInfoPtr pScrn
|
||||
);
|
||||
|
||||
/* vmwaremode.c */
|
||||
void vmwareGetSupportedModelines(
|
||||
DisplayModePtr *monitorModes
|
||||
);
|
||||
#endif
|
||||
|
@ -116,19 +116,20 @@ VMwareCtrlDoSetRes(ScrnInfoPtr pScrn,
|
||||
CARD32 y,
|
||||
Bool resetXinerama)
|
||||
{
|
||||
int modeIndex;
|
||||
DisplayModePtr mode;
|
||||
VMWAREPtr pVMWARE = VMWAREPTR(pScrn);
|
||||
|
||||
if (pScrn && pScrn->modes) {
|
||||
VmwareLog(("DoSetRes: %d %d\n", x, y));
|
||||
|
||||
|
||||
if (resetXinerama) {
|
||||
xfree(pVMWARE->xineramaNextState);
|
||||
pVMWARE->xineramaNextState = NULL;
|
||||
pVMWARE->xineramaNextNumOutputs = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
/*
|
||||
* Don't resize larger than possible but don't
|
||||
* return an X Error either.
|
||||
*/
|
||||
@ -138,20 +139,30 @@ VMwareCtrlDoSetRes(ScrnInfoPtr pScrn,
|
||||
}
|
||||
|
||||
/*
|
||||
* Switch the dynamic modes so that we alternate
|
||||
* which one gets updated on each call.
|
||||
* Find an dynamic mode which isn't current, and replace it with
|
||||
* the requested mode. Normally this will cause us to alternate
|
||||
* between two dynamic mode slots, but there are some important
|
||||
* corner cases to consider. For example, adding the same mode
|
||||
* multiple times, adding a mode that we never switch to, or
|
||||
* adding a mode which is a duplicate of a built-in mode. The
|
||||
* best way to handle all of these cases is to directly test the
|
||||
* dynamic mode against the current mode pointer for this
|
||||
* screen.
|
||||
*/
|
||||
mode = pVMWARE->dynMode1;
|
||||
pVMWARE->dynMode1 = pVMWARE->dynMode2;
|
||||
pVMWARE->dynMode2 = mode;
|
||||
|
||||
/*
|
||||
* Initialise the dynamic mode if it hasn't been used before.
|
||||
*/
|
||||
if (!pVMWARE->dynMode1) {
|
||||
pVMWARE->dynMode1 = VMWAREAddDisplayMode(pScrn, "DynMode", 1, 1);
|
||||
for (modeIndex = 0; modeIndex < NUM_DYN_MODES; modeIndex++) {
|
||||
/*
|
||||
* Initialise the dynamic mode if it hasn't been used before.
|
||||
*/
|
||||
if (!pVMWARE->dynModes[modeIndex]) {
|
||||
pVMWARE->dynModes[modeIndex] = VMWAREAddDisplayMode(pScrn, "DynMode", 1, 1);
|
||||
}
|
||||
|
||||
mode = pVMWARE->dynModes[modeIndex];
|
||||
if (mode != pScrn->currentMode) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
mode = pVMWARE->dynMode1;
|
||||
|
||||
mode->HDisplay = x;
|
||||
mode->VDisplay = y;
|
||||
|
@ -290,6 +290,7 @@ vmwareCursorInit(ScreenPtr pScreen)
|
||||
infoPtr->MaxWidth = MAX_CURS;
|
||||
infoPtr->MaxHeight = MAX_CURS;
|
||||
infoPtr->Flags = HARDWARE_CURSOR_BIT_ORDER_MSBFIRST |
|
||||
HARDWARE_CURSOR_UPDATE_UNHIDDEN |
|
||||
HARDWARE_CURSOR_SOURCE_MASK_NOT_INTERLEAVED;
|
||||
infoPtr->SetCursorColors = vmwareSetCursorColors;
|
||||
infoPtr->SetCursorPosition = vmwareSetCursorPosition;
|
||||
|
123
driver/xf86-video-vmware/src/vmwaremodes.c
Normal file
123
driver/xf86-video-vmware/src/vmwaremodes.c
Normal file
@ -0,0 +1,123 @@
|
||||
/*
|
||||
* Copyright 2007 by VMware, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* Except as contained in this notice, the name of the copyright holder(s)
|
||||
* and author(s) shall not be used in advertising or otherwise to promote
|
||||
* the sale, use or other dealings in this Software without prior written
|
||||
* authorization from the copyright holder(s) and author(s).
|
||||
*/
|
||||
|
||||
/*
|
||||
* vmwaremodes.c --
|
||||
*
|
||||
* Provide the supported modelines for the driver.
|
||||
*
|
||||
* VMware does not have virtual monitor and there is no EDID to
|
||||
* automatically report the supported mode. The list of
|
||||
* supported modelines are manually added in the driver.
|
||||
*/
|
||||
|
||||
#include "xf86.h"
|
||||
|
||||
#ifndef M_T_DRIVER
|
||||
# define M_T_DRIVER 0x40 /* Supplied by the driver (EDID, etc) */
|
||||
#endif
|
||||
|
||||
#define MODEPREFIX NULL, NULL, NULL, 0, M_T_DRIVER
|
||||
#define MODESUFFIX 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,FALSE,FALSE,0,NULL,0,0.0,0.0
|
||||
|
||||
/*
|
||||
* Most of the modelines copied from DMTModes table of xf86EdidModes.c.
|
||||
* For those modes not in DMTModes table are generated by gtf
|
||||
*/
|
||||
static DisplayModeRec VMwareModes[] = {
|
||||
/* 4:3 modes */
|
||||
{ MODEPREFIX, 5260, 320, 304, 336, 352, 0, 240, 241, 244, 249, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 320x240@60Hz, GTF */
|
||||
{ MODEPREFIX, 8660, 400, 392, 432, 464, 0, 300, 301, 304, 311, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 400x300@60Hz, GTF */
|
||||
{ MODEPREFIX, 14900, 512, 520, 568, 624, 0, 384, 385, 388, 398, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 512x384@60Hz, GTF */
|
||||
{ MODEPREFIX, 25175, 640, 656, 752, 800, 0, 480, 490, 492, 525, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 640x480@60Hz, DMT */
|
||||
{ MODEPREFIX, 40000, 800, 840, 968, 1056, 0, 600, 601, 605, 628, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* 800x600@60Hz, DMT */
|
||||
{ MODEPREFIX, 65000, 1024, 1048, 1184, 1344, 0, 768, 771, 777, 806, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 1024x768@60Hz, DMT */
|
||||
{ MODEPREFIX, 81620, 1152, 1216, 1336, 1520, 0, 864, 865, 868, 895, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 1152x864@60Hz, GTF */
|
||||
{ MODEPREFIX,108000, 1280, 1376, 1488, 1800, 0, 960, 961, 964, 1000, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* 1280x960@60Hz, DMT */
|
||||
{ MODEPREFIX,121750, 1400, 1488, 1632, 1864, 0, 1050, 1053, 1057, 1089, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 1400x1050@60Hz,DMT */
|
||||
{ MODEPREFIX,162000, 1600, 1664, 1856, 2160, 0, 1200, 1201, 1204, 1250, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* 1600x1200@60Hz,DMT */
|
||||
{ MODEPREFIX,234000, 1920, 2048, 2256, 2600, 0, 1440, 1441, 1444, 1500, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 1920x1440@60Hz,DMT */
|
||||
{ MODEPREFIX,266950, 2048, 2200, 2424, 2800, 0, 1536, 1537, 1540, 1589, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 2048x1536@60Hz,GTF */
|
||||
{ MODEPREFIX,421560, 2560, 2768, 3048, 3536, 0, 1920, 1921, 1924, 1987, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 2560x1920@60Hz,GTF */
|
||||
/* 16:9 modes */
|
||||
{ MODEPREFIX, 31730, 856, 872, 960, 1064, 0, 480, 481, 484, 497, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 856x480@60Hz, GTF */
|
||||
{ MODEPREFIX, 74480, 1280, 1336, 1472, 1664, 0, 720, 721, 724, 746, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 1280x720@60Hz, GTF */
|
||||
{ MODEPREFIX, 85860, 1368, 1440, 1584, 1800, 0, 768, 769, 772, 795, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 1368x768@60Hz, GTF */
|
||||
{ MODEPREFIX,172800, 1920, 2040, 2248, 2576, 0, 1080, 1081, 1084, 1118, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 1920x1080@60Hz,GTF */
|
||||
/* 16:10 modes */
|
||||
{ MODEPREFIX, 83500, 1280, 1352, 1480, 1680, 0, 800, 803, 809, 831, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 1280x800@60Hz, DMT */
|
||||
{ MODEPREFIX,106500, 1440, 1520, 1672, 1904, 0, 900, 903, 909, 934, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 1440x900@60Hz, DMT */
|
||||
{ MODEPREFIX,146250, 1680, 1784, 1960, 2240, 0, 1050, 1053, 1059, 1089, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 1680x1050@60Hz,DMT */
|
||||
{ MODEPREFIX,193250, 1920, 2056, 2256, 2592, 0, 1200, 1203, 1209, 1245, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 1920x1200@60Hz,DMT */
|
||||
{ MODEPREFIX,348500, 2560, 2752, 3032, 3504, 0, 1600, 1603, 1609, 1658, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 2560x1600@60Hz,DMT */
|
||||
/* DVD modes */
|
||||
{ MODEPREFIX, 26720, 720, 736, 808, 896, 0, 480, 481, 484, 497, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 720x480@60Hz, GTF */
|
||||
{ MODEPREFIX, 32670, 720, 744, 816, 912, 0, 576, 577, 580, 597, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 720x576@60Hz, GTF */
|
||||
/* Odd modes */
|
||||
{ MODEPREFIX, 4190, 320, 304, 328, 336, 0, 200, 201, 204, 208, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 320x200@60Hz, GTF */
|
||||
{ MODEPREFIX, 19520, 640, 648, 712, 784, 0, 400, 401, 404, 415, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 640x400@60Hz, GTF */
|
||||
{ MODEPREFIX, 29580, 800, 816, 896, 992, 0, 480, 481, 484, 497, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 800x480@60Hz, GTF */
|
||||
{ MODEPREFIX, 79500, 1280, 1344, 1472, 1664, 0, 768, 771, 778, 798, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 1280x768@60Hz, DMT */
|
||||
{ MODEPREFIX,108000, 1280, 1328, 1440, 1688, 0, 1024, 1025, 1028, 1066, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* 1280x1024@60Hz,DMT */
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
*-----------------------------------------------------------------------------
|
||||
*
|
||||
* vmwareGetSupportedModelines --
|
||||
*
|
||||
* Get the supported modelines.
|
||||
*
|
||||
* Results:
|
||||
* The supported modelines.
|
||||
*
|
||||
* Side effects:
|
||||
* None.
|
||||
*
|
||||
*-----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
void
|
||||
vmwareGetSupportedModelines(DisplayModePtr *monitorModes)
|
||||
{
|
||||
DisplayModePtr modes = NULL, mode = NULL;
|
||||
int i = 0;
|
||||
|
||||
if (monitorModes == NULL || *monitorModes == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef HAVE_XORG_SERVER_1_2_0
|
||||
for (i = 0; i < sizeof(VMwareModes)/sizeof(DisplayModeRec); i++) {
|
||||
mode = xf86DuplicateMode(&(VMwareModes[i]));
|
||||
modes = xf86ModesAdd(modes, mode);
|
||||
}
|
||||
|
||||
*monitorModes = xf86ModesAdd(*monitorModes, modes);
|
||||
#endif
|
||||
}
|
Loading…
Reference in New Issue
Block a user