Notes on the software emulation drivers
=======================================

RGB driver
==========

There is now an MMX optimized version of the RGB driver.
If you have an MMX capable PC the RGB software emulation will automatically
be accelerated.

Release notes for D3D MMX driver

Functionality
-------------

1. D3D's external interfaces unchanged, all examples and all apps that
can use the RGB driver should be able to run with the RGB MMX driver.

2. Only 16-bit color depths have been optimized.  There is a relatively
minor (2X) improvement in 8-bit dithered RGB rendering.

3. The following are yet-to-be-implemented: 16-bit dithering.

4. The Z-buffer is 16-bit, but is signed, so the farthest Z-value is 0x7fff,
and the nearest is 0x8000.  This should not affect you unless you examine
the Z-buffer directly.

5. There are still some rendering artifacts in certain cases.  We're working
on this problem right now, and should have fixes soon.

6. The driver only supports the PAL8 texture format.  D3D apps should detect
this and create the texture appropriately.  This format is the same as
the one supported by the ramp driver.

Performance
-----------

1. Performance is much better when all surfaces are in system memory, this
includes the rendering target and all textures.

2. Performance is better than that of ramp mode in most situations.
There are some performance bottlenecks that we have yet to address.
We suggest you run the "tunnel" example with the MMX driver to get a
feel for the changed relative costs of rendering qualities: for
example, the speed of gouraud shading is now much closer to that of
flat-shading.  To get the best performance from the tunnel, do the
following:

Specular highlights     OFF
Fog                     OFF
Perspective Correction  OFF
Gouraud shading         ON

With these settings, you should be getting about 29Hz for the tunnel
running in systemmemory fullscreen at 640x400x16.

3. The nonMMX ramp driver works best on textures that are 256x256.
This restriction has been removed in the MMX driver: it supports all
texture dimensions equally well. It is still important to keep the total
texture size as small as possible to reduce memory bandwidth.  Note how
fast the tiny checker texture runs in the tunnel.  The checker texture is
only 64 bytes instead of 64k like most of the other textures in the SDK.
256x2048 is a reasonable size for the texture in a game.

4. Mip-mapping now works on MMX.


RAMP driver support
===================
Optional Z buffering.
Color key and stippled transparency.
Mono interpolated rasterization only.
Point sampled perspective correct textures.
Flat and Gouraud shade modes.

Performance notes for the RAMP driver
=====================================
Texture mapping performance is heavily gated by the speed of memory.
There are a number of ways of maximizing the cache performance of your
textures.  The smaller the textures are, the better chance they have of being
maintained in the secondary cache.  This is crucial for keeping performance
high.  Also, changing the texture per primitive will thrash the cache.  Try
and keep polygons grouped in order of the textures they use.

When using Z buffering and texturing, rendering your scene from front to
back will increase performance.  The textured Z buffered primitives
pre-test the Z buffer on a scanline basis.  If a scanline is hidden by a
previously rendered polygon it is trivially rejected.  If this is the case, Z
buffering performance can exceed non-Z performance.

The retained mode API automatically orders its scenes from front to back
to facilitate this optimization.

In it often a good idea to use the D3DTest program to verify performance
results with different drivers, especially where hardware is involved.


