157 lines
6.0 KiB
Plaintext
157 lines
6.0 KiB
Plaintext
**********************
|
|
*** ***
|
|
*** ***
|
|
*** Direct3D Notes ***
|
|
*** ***
|
|
*** ***
|
|
**********************
|
|
|
|
Last updated September 5, 1996
|
|
|
|
|
|
Notes on the software emulation drivers
|
|
=======================================
|
|
|
|
|
|
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.
|
|
|
|
|
|
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. There is an application included in the sdk\bin directory,
|
|
mmxtog.exe which allows you to switch MMX acceleration off and on for the
|
|
RGB driver.
|
|
|
|
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 optimised. There is a relatively
|
|
minor (2X) improvement in 8-bit dithered RGB rendering.
|
|
|
|
3. The following are yet-to-be-implemented: mip-mapping, 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 accuracy problems with the rendering: these are
|
|
most clearly shown by the colored flashes that appear in the "twist"
|
|
example. 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 systemmemory, this
|
|
includes the rendering target and all textures.
|
|
|
|
2. The current MMX RGB driver is not complete, and there are several
|
|
major performance improvements that we plan to make. Expect another
|
|
improvement of about 10% in all benchmarks for the MMX RGB driver,
|
|
though the more sophisticated the rendering operation, the bigger the
|
|
improvement. The biggest improvement should be in Z-buffered
|
|
gouraud-shaded perspective-correct texture-mapping. Perspective
|
|
correction will be much faster in the next beta.
|
|
|
|
3. 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.
|
|
|
|
4. The existing 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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Known Issues
|
|
============
|
|
When using RGB software rasterisation, D3DRMMATERIALMODE_FROMFRAME
|
|
does not work correctly if the object is unlit.
|
|
|
|
It is not currently possible to load textures from resources if the code
|
|
resides in a dll.
|
|
|
|
Background depth images do not double buffer correctly in the retained
|
|
mode api (page flipping scenario). Use IDirect3DRMViewport::ForceUpdate()
|
|
to force the dirty region to be updated.
|
|
|
|
The following issues is not made clear in the documentation:
|
|
1) SetOrientation overrides any previous shear or scale applied to a
|
|
frame.
|
|
|
|
2) Texture Transparency. If the retained mode API has to sample down
|
|
the colors used in a texture in order to, for example, palettize it,
|
|
the color you're using as the transparent color may get remapped to
|
|
another close color and transparency will no longer work. In order to
|
|
stop this happening, pick a color to use for transparency that is not
|
|
close to any other color in the texture.
|
|
|
|
The Matrox Millenium driver does not render correctly fullscreen
|
|
unless Clear is called at least once. Since the Millenium does not
|
|
support texture mapping, this will not affect the types of application
|
|
which do not use Clear. A workaround for this issue is to call Clear
|
|
in your application once before entering the rendering loop.
|
|
|
|
When using the Retained Mode method IDirect3DRM::LoadTexture, the texture
|
|
is inverted when loaded from a BMP file. The simplest work around is to
|
|
reverse the meshs texture coordinates or load from a PPM file.
|
|
|