README revision 1.1 1
2 Copyright (C) 1999-2002 VMware, Inc.
3 All Rights Reserved
4
5 The code here may be used/distributed under the terms of the standard
6 XFree86 license.
7
8
9 VMware SVGA Device Interface and Programming Model
10 --------------------------------------------------
11
12
13 Include Files
14 -------------
15
16 svga_reg.h
17 SVGA register definitions, SVGA capabilities, and FIFO command definitions.
18
19 svga_limits.h
20 Included by svga_reg.h, defines maximum frame buffer and memory region
21 sizes.
22
23 svga_modes.h
24 A list of default display modes that are built into the driver.
25
26 svga_overlay.h
27 A list of definitions required for Xv extension support. Included by vmwarevideo.c
28
29 svga_escape.h
30 A list of definitions for the SVGA Escape commands.
31
32 guest_os.h
33 Values for the GUEST_ID register.
34
35 vm_basic_types.h
36 Common type definitions.
37
38 vm_device_version.h
39 PCI vendor ID's and related information.
40
41 vmwarectrl.h
42 vmwarectrlproto.h
43 The definitions of the VMWARECTRL protocol extension.
44
45 Programming the VMware SVGA Device
46 ----------------------------------
47
48 1. Reading/writing a register:
49
50 The SVGA registers are addressed by an index/value pair of 32 bit
51 registers in the IO address space.
52
53 The 0710 VMware SVGA chipset (PCI device ID PCI_DEVICE_ID_VMWARE_SVGA) has
54 its index and value ports hardcoded at:
55
56 index: SVGA_LEGACY_BASE_PORT + 4 * SVGA_INDEX_PORT
57 value: SVGA_LEGACY_BASE_PORT + 4 * SVGA_VALUE_PORT
58
59 The 0405 VMware SVGA chipset (PCI device ID PCI_DEVICE_ID_VMWARE_SVGA2)
60 determines its index and value ports as a function of the first base
61 address register in its PCI configuration space as:
62
63 index: <Base Address Register 0> + SVGA_INDEX_PORT
64 value: <Base Address Register 0> + SVGA_VALUE_PORT
65
66 To read a register:
67 Set the index port to the index of the register, using a dword OUT
68 Do a dword IN from the value port
69
70 To write a register:
71 Set the index port to the index of the register, using a dword OUT
72 Do a dword OUT to the value port
73
74 Example, setting the width to 1024:
75
76 mov eax, SVGA_REG_WIDTH
77 mov edx, <SVGA Address Port>
78 out dx, eax
79 mov eax, 1024
80 mov edx, <SVGA Value Port>
81 out dx, eax
82
83 2. Initialization
84 Check the version number
85 loop:
86 Write into SVGA_REG_ID the maximum SVGA_ID_* the driver supports.
87 Read from SVGA_REG_ID.
88 Check if it is the value you wrote.
89 If yes, VMware SVGA device supports it
90 If no, decrement SVGA_ID_* and goto loop
91 This algorithm converges.
92
93 Map the frame buffer and the command FIFO
94 Read SVGA_REG_FB_START, SVGA_REG_FB_SIZE, SVGA_REG_MEM_START,
95 SVGA_REG_MEM_SIZE.
96 Map the frame buffer (FB) and the FIFO memory (MEM)
97
98 Get the device capabilities and frame buffer dimensions
99 Read SVGA_REG_CAPABILITIES, SVGA_REG_MAX_WIDTH, SVGA_REG_MAX_HEIGHT,
100 and SVGA_REG_HOST_BITS_PER_PIXEL / SVGA_REG_BITS_PER_PIXEL.
101
102 Note: The capabilities can and do change without the PCI device ID
103 changing or the SVGA_REG_ID changing. A driver should always check
104 the capabilities register when loading before expecting any
105 capabilities-determined feature to be available. See below for a list
106 of capabilities as of this writing.
107
108 Note: If SVGA_CAP_8BIT_EMULATION is not set, then it is possible that
109 SVGA_REG_HOST_BITS_PER_PIXEL does not exist and
110 SVGA_REG_BITS_PER_PIXEL should be read instead.
111
112 Report the Guest Operating System
113 Write SVGA_REG_GUEST_ID with the appropriate value from <guest_os.h>.
114 While not required in any way, this is useful information for the
115 virtual machine to have available for reporting and sanity checking
116 purposes.
117
118 SetMode
119 Set SVGA_REG_WIDTH, SVGA_REG_HEIGHT, SVGA_REG_BITS_PER_PIXEL
120 Read SVGA_REG_FB_OFFSET
121 (SVGA_REG_FB_OFFSET is the offset from SVGA_REG_FB_START of the
122 visible portion of the frame buffer)
123 Read SVGA_REG_BYTES_PER_LINE, SVGA_REG_DEPTH, SVGA_REG_PSEUDOCOLOR,
124 SVGA_REG_RED_MASK, SVGA_REG_GREEN_MASK, SVGA_REG_BLUE_MASK
125
126 Note: SVGA_REG_BITS_PER_PIXEL is readonly if
127 SVGA_CAP_8BIT_EMULATION is not set in the capabilities register. Even
128 if it is set, values other than 8 and SVGA_REG_HOST_BITS_PER_PIXEL
129 will be ignored.
130
131 Enable SVGA
132 Set SVGA_REG_ENABLE to 1
133 (to disable SVGA, set SVGA_REG_ENABLE to 0. Setting SVGA_REG_ENABLE
134 to 0 also enables VGA.)
135
136 Initialize the command FIFO
137 The FIFO is exclusively dword (32-bit) aligned. The first four
138 dwords define the portion of the MEM area that is used for the
139 command FIFO. These are values are all in byte offsets from the
140 start of the MEM area.
141
142 A minimum sized FIFO would have these values:
143 mem[SVGA_FIFO_MIN] = 16;
144 mem[SVGA_FIFO_MAX] = 16 + (10 * 1024);
145 mem[SVGA_FIFO_NEXT_CMD] = 16;
146 mem[SVGA_FIFO_STOP] = 16;
147
148 Set SVGA_REG_CONFIG_DONE to 1 after these values have been set.
149
150 Note: Setting SVGA_REG_CONFIG_DONE to 0 will stop the device from
151 reading the FIFO until it is reinitialized and SVGA_REG_CONFIG_DONE is
152 set to 1 again.
153
154 3. SVGA command FIFO protocol
155 The FIFO is empty when SVGA_FIFO_NEXT_CMD == SVGA_FIFO_STOP. The
156 driver writes commands to the FIFO starting at the offset specified
157 by SVGA_FIFO_NEXT_CMD, and then increments SVGA_FIFO_NEXT_CMD.
158
159 The FIFO is full when SVGA_FIFO_NEXT_CMD is one word before SVGA_FIFO_STOP.
160
161 When the FIFO becomes full, the FIFO should be sync'd
162
163 To sync the FIFO
164 Write SVGA_REG_SYNC
165 Read SVGA_REG_BUSY
166 Wait for the value in SVGA_REG_BUSY to be 0
167
168 The FIFO should be sync'd before the driver touches the frame buffer, to
169 guarantee that any outstanding BLT's are completed.
170
171 4. Cursor
172 When SVGA_CAP_CURSOR is set, hardware cursor support is available. In
173 practice, SVGA_CAP_CURSOR will only be set when SVGA_CAP_CURSOR_BYPASS is
174 also set and drivers supporting a hardware cursor should only worry about
175 SVGA_CAP_CURSOR_BYPASS and only use the FIFO to define the cursor. See
176 below for more information.
177
178 5. Pseudocolor
179 When the read-only register SVGA_REG_PSEUDOCOLOR is 1, the device is in a
180 colormapped mode whose index width and color width are both SVGA_REG_DEPTH.
181 Thus far, 8 is the only depth at which pseudocolor is ever used.
182
183 In pseudocolor, the colormap is programmed by writing to the SVGA palette
184 registers. These start at SVGA_PALETTE_BASE and are interpreted as
185 follows:
186
187 SVGA_PALETTE_BASE + 3*n - The nth red component
188 SVGA_PALETTE_BASE + 3*n + 1 - The nth green component
189 SVGA_PALETTE_BASE + 3*n + 2 - The nth blue component
190
191 And n ranges from 0 to ((1<<SVGA_REG_DEPTH) - 1).
192
193
194 Drawing to the Screen
195 ---------------------
196
197 After initialization, the driver can write directly to the frame buffer. The
198 updated frame buffer is not displayed immediately, but only when an update
199 command is sent. The update command (SVGA_CMD_UPDATE) defines the rectangle
200 in the frame buffer that has been modified by the driver, and causes that
201 rectangle to be updated on the screen.
202
203 A complete driver can be developed this way. For increased performance,
204 additional commands are available to accelerate common operations. The two
205 most useful are SVGA_CMD_RECT_FILL and SVGA_CMD_RECT_COPY.
206
207 After issuing an accelerated command, the FIFO should be sync'd, as described
208 above, before writing to the frame buffer.
209
210 Addendum on 7/11/2000
211 ---------------------
212
213 SVGA_REG_FB_OFFSET and SVGA_REG_BYTES_PER_LINE may change after SVGA_REG_WIDTH
214 or SVGA_REG_HEIGHT is set. Also the VGA registers must be written to after
215 setting SVGA_REG_ENABLE to 0 to change the display to a VGA mode.
216
217 Addendum on 11/29/2001
218 ---------------------
219
220 Actually, after changing any of SVGA_REG_WIDTH, SVGA_REG_HEIGHT, and
221 SVGA_REG_BITS_PER_PIXEL, all of the registers listed in the 'SetMode'
222 initialization section above should be reread. Additionally, when changing
223 modes, it can be convenient to set SVGA_REG_ENABLE to 0, change
224 SVGA_REG_WIDTH, SVGA_REG_HEIGHT, and SVGA_REG_BITS_PER_PIXEL (if available),
225 and then set SVGA_REG_ENABLE to 1 again.
226
227
228 Capabilities
229 ------------
230
231 The capabilities register (SVGA_REG_CAPABILITIES) is an array of bits that
232 indicates the capabilities of the SVGA emulation. A driver should check
233 SVGA_REG_CAPABILITIES every time it loads before relying on any feature that
234 is only optionally available.
235
236 Some of the capabilities determine which FIFO commands are available. This
237 table shows which capability indicates support for which command.
238
239 FIFO Command Capability
240 ------------ ----------
241
242 SVGA_CMD_RECT_FILL SVGA_CAP_RECT_FILL
243 SVGA_CMD_RECT_COPY SVGA_CAP_RECT_COPY
244 SVGA_CMD_DEFINE_BITMAP SVGA_CAP_OFFSCREEN
245 SVGA_CMD_DEFINE_BITMAP_SCANLINE SVGA_CAP_OFFSCREEN
246 SVGA_CMD_DEFINE_PIXMAP SVGA_CAP_OFFSCREEN
247 SVGA_CMD_DEFINE_PIXMAP_SCANLINE SVGA_CAP_OFFSCREEN
248 SVGA_CMD_RECT_BITMAP_FILL SVGA_CAP_RECT_PAT_FILL
249 SVGA_CMD_RECT_PIXMAP_FILL SVGA_CAP_RECT_PAT_FILL
250 SVGA_CMD_RECT_BITMAP_COPY SVGA_CAP_RECT_PAT_FILL
251 SVGA_CMD_RECT_PIXMAP_COPY SVGA_CAP_RECT_PAT_FILL
252 SVGA_CMD_FREE_OBJECT SVGA_CAP_OFFSCREEN
253 SVGA_CMD_RECT_ROP_FILL SVGA_CAP_RECT_FILL +
254 SVGA_CAP_RASTER_OP
255 SVGA_CMD_RECT_ROP_COPY SVGA_CAP_RECT_COPY +
256 SVGA_CAP_RASTER_OP
257 SVGA_CMD_RECT_ROP_BITMAP_FILL SVGA_CAP_RECT_PAT_FILL +
258 SVGA_CAP_RASTER_OP
259 SVGA_CMD_RECT_ROP_PIXMAP_FILL SVGA_CAP_RECT_PAT_FILL +
260 SVGA_CAP_RASTER_OP
261 SVGA_CMD_RECT_ROP_BITMAP_COPY SVGA_CAP_RECT_PAT_FILL +
262 SVGA_CAP_RASTER_OP
263 SVGA_CMD_RECT_ROP_PIXMAP_COPY SVGA_CAP_RECT_PAT_FILL +
264 SVGA_CAP_RASTER_OP
265 SVGA_CMD_DEFINE_CURSOR SVGA_CAP_CURSOR
266 SVGA_CMD_DISPLAY_CURSOR SVGA_CAP_CURSOR
267 SVGA_CMD_MOVE_CURSOR SVGA_CAP_CURSOR
268 SVGA_CMD_DEFINE_ALPHA_CURSOR SVGA_CAP_ALPHA_CURSOR
269 SVGA_CMD_DRAW_GLYPH SVGA_CAP_GLYPH
270 SVGA_CMD_DRAW_GLYPH_CLIPPED SVGA_CAP_GLYPH_CLIPPING
271 SVGA_CMD_ESCAPE SVGA_FIFO_CAP_ESCAPE
272
273 Note: SVGA_CMD_DISPLAY_CURSOR and SVGA_CMD_MOVE_CURSOR should not be used.
274 Drivers wishing hardware cursor support should use cursor bypass (see below).
275
276 Other capabilities indicate other functionality as described below:
277
278 SVGA_CAP_CURSOR_BYPASS
279 The hardware cursor can be drawn via SVGA Registers (without requiring
280 the FIFO be synchronized and will be drawn potentially before any
281 outstanding unprocessed FIFO commands).
282
283 Note: Without SVGA_CAP_CURSOR_BYPASS_2, cursors drawn this way still
284 appear in the guest's framebuffer and need to be turned off before any
285 save under / overlapping drawing and turned back on after. This can
286 cause very noticeable cursor flicker.
287
288 SVGA_CAP_CURSOR_BYPASS_2
289 Instead of turning the cursor off and back on around any overlapping
290 drawing, the driver can write SVGA_CURSOR_ON_REMOVE_FROM_FB and
291 SVGA_CURSOR_ON_RESTORE_TO_FB to SVGA_REG_CURSOR_ON. In almost all
292 cases these are NOPs and the cursor will be remain visible without
293 appearing in the guest framebuffer. In 'direct graphics' modes like
294 Linux host fullscreen local displays, however, the cursor will still
295 be drawn in the framebuffer, still flicker, and be drawn incorrectly
296 if a driver does not use SVGA_CURSOR_ON_REMOVE_FROM_FB / RESTORE_TO_FB.
297
298 SVGA_CAP_8BIT_EMULATION
299 SVGA_REG_BITS_PER_PIXEL is writable and can be set to either 8 or
300 SVGA_REG_HOST_BITS_PER_PIXEL. Otherwise the only SVGA modes available
301 inside a virtual machine must match the host's bits per pixel.
302
303 Note: Some versions which lack SVGA_CAP_8BIT_EMULATION also lack the
304 SVGA_REG_HOST_BITS_PER_PIXEL and a driver should assume
305 SVGA_REG_BITS_PER_PIXEL is both read-only and initialized to the only
306 available value if SVGA_CAP_8BIT_EMULATION is not set.
307
308 SVGA_CAP_OFFSCREEN_1
309 SVGA_CMD_RECT_FILL, SVGA_CMD_RECT_COPY, SVGA_CMD_RECT_ROP_FILL,
310 SVGA_CMD_RECT_ROP_COPY can operate with a source or destination (or
311 both) in offscreen memory.
312
313 Usable offscreen memory is a rectangle located below the last scanline
314 of the visible memory:
315 x1 = 0
316 y1 = (SVGA_REG_FB_SIZE + SVGA_REG_BYTES_PER_LINE - 1) /
317 SVGA_REG_BYTES_PER_LINE
318 x2 = SVGA_REG_BYTES_PER_LINE / SVGA_REG_DEPTH
319 y2 = SVGA_REG_VRAM_SIZE / SVGA_REG_BYTES_PER_LINE
320
321
322 Cursor Handling
323 ---------------
324
325 Starting with GSX Server Beta 3 (after 11/15/2000), hardware cursor support
326 was added. Actually, both a hardware cursor via the FIFO (SVGA_CAP_CURSOR)
327 and a hardware cursor via the SVGA registers (SVGA_CAP_CURSOR_BYPASS) were
328 added. SVGA_CAP_CURSOR was never available without SVGA_CAP_CURSOR_BYPASS and
329 the FIFO hardware cursor should never be used and may be removed without
330 warning in the future.
331
332 Cursor bypass is programmed using the two FIFO commands SVGA_CMD_DEFINE_CURSOR
333 and SVGA_CMD_DEFINE_ALPHA_CURSOR in conjunction with the SVGA registers
334 SVGA_REG_CURSOR_ID, SVGA_REG_CURSOR_X, SVGA_REG_CURSOR_Y, and
335 SVGA_REG_CURSOR_ON.
336
337 A driver defines an AND/XOR hardware cursor using SVGA_CMD_DEFINE_CURSOR to
338 assign an ID and establish the AND and XOR masks with the hardware. A driver
339 uses SVGA_CMD_DEFINE_ALPHA_CURSOR to define a 32 bit mask whose top 8 bits are
340 used to blend the cursor image with the pixels it covers. Alpha cursor
341 support is only available when SVGA_CAP_ALPHA_CURSOR is set.
342
343 Once a cursor is defined, a driver can draw it to the screen at any time by
344 writing the SVGA_REG_CURSOR_ID register with the ID used when the cursor was
345 defined, writing SVGA_REG_CURSOR_X and SVGA_REG_CURSOR_Y with the location of
346 the cursor, and SVGA_CURSOR_ON_SHOW to SVGA_REG_CURSOR_ON. The drawing occurs
347 when SVGA_REG_CURSOR_ON is written.
348
349 Writing SVGA_CURSOR_ON_HIDE to SVGA_REG_CURSOR_ON will turn the cursor off and
350 make it vanish from the display and, if present, from the framebuffer.
351 SVGA_CURSOR_ON_REMOVE_FROM_FB will ensure the cursor is not in the
352 framebuffer, but will only turn it off if there's no other way to remove it.
353 SVGA_CURSOR_ON_RESTORE_TO_FB is the complement to
354 SVGA_CURSOR_ON_REMOVE_FROM_FB. Whenever possible, the device will not put the
355 cursor in the framebuffer and Remove From / Restore To will be NOPs.
356
357 Note: The cursor must be out of the frame buffer before the driver (or any
358 agent in the virtual machine) touches an overlapping portion of the frame
359 buffer, because it is actually drawn into the frame buffer memory in the
360 case of direct graphics mode (e.g. full screen mode on Linux). The cursor
361 does not have to be touched before issuing an accelerated command via the
362 command FIFO, this case is handled by the SVGA device.
363
364 Note: If SVGA_CAP_CURSOR_BYPASS2 is not present, the driver must use
365 SVGA_CURSOR_ON_HIDE and SVGA_CURSOR_ON_HIDE to be certain the cursor is out of
366 the framebuffer.
367
368
369 Driver Version Numbers
370 ----------------------
371
372 The SVGA drivers use the following convention for their version numbers:
373
374 Version 10.0 - The first version that uses the FIFO
375 Version 10.1 - The version that uses the hardware cursor emulation via the FIFO
376 Version 10.2 - The version that uses the cursor that bypasses the FIFO
377 Version 10.3 - The version that can also support the 0405 chipset
378 Version 10.4 - The version that knows about SVGA_CAP_CURSOR_BYPASS2
379 Version 10.5 - [Never released or well defined]
380 Version 10.6 - The version that knows about SVGA_CAP_8BIT_EMULATION
381 Version 10.7 - The version that knows about SVGA_CAP_ALPHA_CURSOR
382 Version 10.8 - The version that knows about SVGA_CAP_GLYPH
383 Version 10.9 - The version that knows about SVGA_CAP_OFFSCREEN_1
384
385 Note that this is merely the convention used by SVGA drivers written and
386 maintained by VMware, Inc. and describes the capabilities of the driver, not
387 the virtual hardware. An SVGA driver can only use the intersection of the
388 functionality it supports and the functionality available in the virtual SVGA
389 hardware.
390
391
392 Frequently Asked Questions
393 --------------------------
394
395 1. My driver doesn't display anything, what's going on?
396
397 First check if you are issuing an SVGA_CMD_UPDATE after drawing to
398 the screen. Another check you can do is to run your driver in full
399 screen mode on a Linux host. In this case you are drawing directly
400 on the frame buffer, so what you draw to the screen will be immediately
401 visible. If nothing is visible in this case, then most likely your
402 driver hasn't mapped the frame buffer correctly.
403
404 A discrepancy between what you get in full screen mode and what you
405 get in window mode indicates that you have a missing or incorrect
406 update command.
407
408
409 2. What's the difference between bitmaps and pixmaps?
410
411 Pixmaps have the same depth as the screen, while bitmaps have depth one.
412 When a bitmap is drawn, the command also takes two colors, foreground and
413 background. The set bits in the bitmap are replaced with the foreground
414 color, and the unset bits are replaced with the background color.
415
416 Pixmaps, on the other hand, can be directly copied to the screen.
417
418
419 3. What's the significance of the ROP in the commands SVGA_CMD_RECT_ROP_FILL,
420 SVGA_CMD_RECT_ROP_BITMAP_COPY, etc. ?
421
422 The ROP in the ...ROP... commands is a raster operation. It has the same
423 significance (and encoding) as it does in X. The ROP value SVGA_ROP_COPY
424 means the source is copied to the destination, which makes these commands the
425 same as their non-ROP counterparts. The most commonly used raster operation
426 other than copy is probably SVGA_ROP_XOR, which combines the source and
427 destination using exclusive-or.
428
429
430 4. Tell me more about bitmaps and pixmaps. For example, the macro
431 SVGA_CMD_DEFINE_BITMAP has a field <scanlines>. What should this be
432 set to? Likewise with SVGA_CMD_DEFINE_PIXMAP. And when should the
433 SCANLINE macros be used?
434
435 OK, I'll use pixmaps as an example. First you have to define the pixmap:
436
437 #define SVGA_CMD_DEFINE_PIXMAP 6
438 /* FIFO layout:
439 Pixmap ID, Width, Height, Depth, <scanlines> */
440
441 The ID is something you choose, which you subsequently use to refer to
442 this pixmap. It must be an integer between 0 and SVGA_MAX_ID.
443
444 The width and height and depth are the dimensions of the pixmap. For now,
445 the depth of the pixmap has to match the depth of the screen.
446
447 The scanlines are the pixels that make up the pixmap, arranged one row
448 at a time. Each row is required to be 32-bit aligned. The macros
449 SVGA_PIXMAP_SCANLINE_SIZE and SVGA_PIXMAP_SIZE give the size of a
450 single scanline, and the size of the entire pixmap, respectively, in
451 32-bit words.
452
453 The second step is to use it:
454
455 #define SVGA_CMD_RECT_PIXMAP_FILL 9
456 /* FIFO layout:
457 Pixmap ID, X, Y, Width, Height */
458
459 The ID here is the one you chose when defining the pixmap. X, Y,
460 Width, and Height define a rectangle on the screen that is to be filled
461 with the pixmap. The pixmap is screen aligned, which means that the
462 coordinates in the pixmap are defined by the screen coordinates modulo
463 the pixmap dimensions.
464
465 If you want a different alignment between the screen and the pixmap,
466 then you can use this command, which allows the pixmap coordinates to
467 be defined:
468
469 #define SVGA_CMD_RECT_PIXMAP_COPY 11
470 /* FIFO layout:
471 Pixmap ID, Source X, Source Y, Dest X, Dest Y, Width,
472 Height */
473
474 The Source X and Source Y are pixmap coordinates, and the Dest X and
475 Dest Y are screen coordinates.
476
477
478 5. OK, now it works briefly, then stops displaying anything. Also,
479 my log file is filled with lines like:
480 Unknown Command 0xff in SVGA command FIFO
481 What's happening?
482
483 The most common problem at this point is that the FIFO gets out
484 of sync. This can happen if the amount of data in the FIFO doesn't
485 match what the VMware SVGA device expects. To track this down, try
486 to isolate the particular command which causes the problem.
487
488 Another way this can happen is if the wraparound in the FIFO isn't
489 done correctly. Here is some example code for writing to the FIFO
490 (mem is an array of 32-bit integers that points to the FIFO memory
491 region):
492
493 while (TRUE) {
494 fifo_min = mem[SVGA_FIFO_MIN] / 4;
495 fifo_max = mem[SVGA_FIFO_MAX] / 4;
496 fifo_next = mem[SVGA_FIFO_NEXT_CMD] / 4;
497 fifo_stop = mem[SVGA_FIFO_STOP] / 4;
498
499 tmp_next = fifo_next+1;
500 if (tmp_next == fifo_max)
501 tmp_next = fifo_min; // Wraparound
502
503 if (tmp_next == fifo_stop) {
504 sync_fifo(); // FIFO full
505 continue; // retry
506 }
507
508 mem[fifo_next] = item;
509 mem[SVGA_FIFO_NEXT_CMD] = tmp_next * 4;
510 break;
511 }
512
513 This isn't the most efficient code, but it should work. It's important
514 to do the increment with wraparound before the FIFO full check, and to
515 check FIFO full before updating the next command pointer.
516
517
518 6. My driver tries to switch modes and either nothing happens or the
519 display becomes completely garbled. What's going on?
520
521 When you change modes, make very sure you reread all of the registers listed
522 above under SetMode. Getting the pitch (SVGA_REG_BYTES_PER_LINE) incorrect
523 will cause a heavily garbled display. Also, if you change
524 SVGA_REG_BITS_PER_PIXEL, make certain that SVGA_CAP_8BIT_EMULATION is present
525 in the SVGA_REG_CAPABILITIES register. Also, even with 8 bit emulation, the
526 driver must still use either 8 bpp or SVGA_REG_HOST_BITS_PER_PIXEL bpp,
527 nothing else.
528
529
530 7. Why does my driver's hardware cursor work when my virtual machine is in
531 window mode, but draw/erase incorrectly or in garbled locations in fullscreen
532 mode?
533
534 You need to make sure you use SVGA_CURSOR_ON_REMOVE_FROM_FB and
535 SVGA_CURSOR_ON_RESTORE_TO_FB _every_ time your driver or the virtual machine
536 touches a region of the framebuffer that overlaps the cursor. If you forget
537 to remove it then it can show up when doing save-under operations or get mixed
538 in with other drawing. If you forget to restore it then can disappear. You
539 also need to make sure SVGA_CAP_CURSOR_BYPASS2 is available, or else you will
540 have to use SVGA_CURSOR_ON_SHOW and SVGA_CURSOR_ON_HIDE (which will flicker,
541 even in window mode), or else a software cursor. Newer version of the virtual
542 SVGA hardware will never put the hardware cursor in the framebuffer while in
543 window mode, so everything will appear to work correctly there.
544
545
546 8. Why do my accelerated glyphs look funny? OR Why does the fifo complain
547 about invalid commands when I draw accelerated glyphs?
548
549 The bitmap data passed to SVGA_CMD_DRAW_GLYPH_* must not have any per-scanline
550 alignment. If there are any remaining bits left in the last byte of a scanline,
551 the first bits of the next scanline should use them.
552
553 The bitmap data as a whole must be 4 byte aligned.
554
555 $XFree86: xc/programs/Xserver/hw/xfree86/drivers/vmware/README,v 1.5 2002/10/16 22:12:53 alanh Exp $
556