
                     DirectX 6 Driver for Mesa 3.0


This software is distributed under the terms of the GNU Library
General Public License, see the LICENSE file for details.



What do you need ?
------------------

	- A PC with a DirectX 6 video driver installed.

	- Mesa 3.0

	- The 3Dfx Glide library 2.3 or later for your OS (the 2.4 works fine).
	  The Voodoo2 requires the Glide library 2.51. The Glide 3.0 is not
	  compatible with the Glide 2.x so it doesn't work with the current
	  version of the driver;

	- Visual C++ 5.0 is only compiler test but others should be ok with
       changes to the makefiles (CFLAGS/LFLAGS).

	- DirectX 6 SDK (was a MS download but not sure if still available).

	- SoftIce or another debugger that will get DPF's is nice.


Tested on:
----------
	Windows 95
  	Windows 98
	Windows NT 5.0 (beta 2)


What is able to do ?
--------------------

	- the driver will try and use DirectX to rasterize the OpenGL primitives
	that are sent to the driver.  The driver will fall back to SW  if the rendering 
	context is too big.  The fallback to SW still uses DirectDraw.  If the driver
	fails to support and operation (accum, stencil, etc) then it will try and get
	Mesa to render it in SW.  DirectX 6 features that are unsupported by the 
	installed DirectX 6 driver will be mapped to some other best fit feature.


How to compile:
---------------

	These instructions assume you have Visual C++ installed.

	  You might need to increase you enviroment space.  You can do this by 
	adding the following statement to you config.sys.

	shell=C:\COMMAND.COM C:\ /p /e:8198

	  Next setup you compiler enviroment by running vcvars32.bat in the Visual C++
 	'bin' directoy.

	c:\DevStudio\VC\bin\vcvars32.bat

	  Modify the D3D makefile to point at your SDK install.  Example has the SDK
	installed on my 'f' drive in the root.

	file: \Mesa-3.0\src\makefile.d3d

	SDKROOT=f:\mssdk

	  Now you can simply make the project.  If you look in the makefile you can see
	I have some different targets like 'install'.  

	nmake /f makefile.d3d


FAQ:
----

	1) I don't think the driver is using my DirectX driver.

 	  This maybe true as the current version will only select the Primary D3D driver
	installed.  If you 3D card is the secondary (3dfx) then your out of luck for this
	release.

	2) The driver seems like its not HW accelerated.

	  If you have a video card with limited memory then you might want to try and 
	change your destop resolution to a low setting (640x480x16) so that the 3D part
	of the card has more resources.  Remeber the driver can't make the card better...

	3) Nothing works.

	  Make sure you have a DirectX '6' driver installed.  Check you driver docs for this
	info or use the SDK info utilities.
	  The final 'dll' is named opengl32.dll and is either in the same directory as the 
	OpenGL program or in your system directory (x:\windows\system or x:\winnt\system32).
	  Check your destop resolution.  Most DirectX 6 drivers will only support 16bit and
	32bit color depth.  To find out for sure you can check the DirectX Info Viewer in
	the SDK.
	  

	4) Rendering doesn't look right.

	  Sometimes this is because the card doesn't support a feature that that is required.
	This is usually due to unsupported alpha functions (test/blend) or texture mapping.
	Some cards suffer from too small of an alpha channel.  The driver does its best to
	fallback on unsupported features.  This is not to say the driver may not have a bug(s).

	5) Textures look bad.

	  No mipmapping in this release.


Thanks to:
----------

Brian Paul




Leigh McRae (leigh@altsoftware.com)
February 9, 1999

