Setting up 3dfx Voodoo in DOSBox-X

Overview

The 3dfx Voodoo is a 3D accelerator chipset released in late 1996, and sold by various graphic card manufacturers. The original Voodoo 1 adapters need to be used in conjunction with a separate VGA adapter in a pass-through manor.

As these where the early days of 3D acceleration, it uses its own proprietary Glide API which was supported by many DOS and Windows 9x games at the time.

DOSBox-X has support for emulating the 3dfx Voodoo in one of two modes.

  • Low-Level Emulation, emulating the 3dfx Voodoo 1 hardware. This requires a fairly fast PC.

  • High-Level Emulation, where the Glide API calls are passed through to the host OS, where it is then converted to a modern 3D Graphics API.

[voodoo] options

This section will list the available 3dfx Voodoo configuration options that DOSBox-X provides. Unless otherwise noted the options effecting the 3dfx Voodoo emulation are in the [voodoo] section of the DOSBox-X config file.

voodoo_card

  • Default value: auto

  • Possible values: auto, false, software, opengl

Enables low-level Voodoo card hardware emulation.

The "auto" option means it will try to use OpenGL if possible, and otherwise fallback to software rendering.

voodoo_maxmem

  • Default value: true

  • Possible values: true, false

Enables maximum memory size for the Voodoo card hardware.

If true (default), the memory size will be 12MB (4MB front buffer + 2x4MB texture units). Otherwise, the memory size will be the standard 4MB (2MB front buffer + 1x2MB texture unit).

glide

  • Default value: false

  • Possible values: true, false

Enables high-level Glide API pass-through to the host OS. This requires that the host OS has a Glide API library (or Glide wrapper) installed, and in addition it requires the special GLIDE2X.OVL file provided by DOSBox-X.

lfb

  • Default value: full_noaux

  • Possible values: full, full_noaux, read, read_noaux, write, write_noaux, none

Enable LFB (Line-Fill-Buffer) CPU Cache access for Glide.

Note
OpenGlide does not support locking aux buffer, as such please use _noaux modes.

splash

  • Default value: true

  • Possible values: true, false

Show 3dfx splash screen

This option only applies when using the high-level Glide API emulation. In addition, this is only supported on Windows, and it requires 3dfxSpl2.dll to be installed.

[cpu] option

ignore undefined msr

  • Default value: false

  • Possible values: true, false

This setting is located in the [cpu] section of the DOSBox-X config file.

Normally the CPU will fire an Invalid Opcode exception in the case of an undefined MSR (Model-specific register).

This option is off by default, enable if using software or drivers that assumes the presence of certain MSR registers without checking. If you are using certain versions of the original 3dfx Glide drivers for MS-DOS you will need to set this to TRUE as 3dfx appears to have coded GLIDE2X.OVL to assume the presence of Pentium Pro/Pentium II MTRR registers.

Another way to circumvent this issue with the 3dfx drivers, is by emulating a Pentium Pro CPU in DOSBox-X by setting cputype=ppro_slow in the [cpu] section of your DOSBox-X config file.

Low Level emulation

This emulation mode has been supported by DOSBox-X for a long time. It emulates the original 3dfx Voodoo 1 chipset, and therefore works with the official 3dfx DOS and Windows drivers. It is the easiest mode to get working, and is in fact enabled by default. Depending on the game, you may not have to do anything, or you just need to select 3dfx Voodoo in the setup program. Some other games may require that you install a patch, or that you run a different executable to start in 3dfx mode.

If you want to use 3dfx Voodoo emulation when running Windows 95 or 98 in DOSBox-X, you need to use this mode.

High Level emulation

This mode requires DOSBox-X 0.83.5 or newer, and it only works for DOS games that use GLIDE2X.OVL.

Instead of emulating the 3dfx hardware, this method converts the Glide API calls to a modern 3D Graphics API, and is therefore more efficient. However, it also requires a few more steps to get working. It requires that the Host OS has a Glide API library installed (glide2x.dll for Windows, libglide2x.so for Linux, and libglide2x.dylib for macOS), and that you use the special GLIDE2X.OVL provided in DOSBox-X, instead of one that may be provided with the game or provided by 3dfx.

When DOSBox-X is started with glide=true the special GLIDE2X.OVL file will automatically appear on the emulated Z: drive. If the game already provides a GLIDE2X.DLL file located in the game directory, then you need to rename the game’s original GLIDE2X.OVL file to something like GLIDE2X.ORG. Then the game can usually find the GLIDE2X.DLL on the Z: drive automatically, but if not, you also need to copy the GLIDE2X.OVL file from the Z: drive to the game directory for use with the game.

Note
It is good to keep a backup of the games original GLIDE2X.OVL file, as you will need it if you decide you want to use the 3dfx Voodoo hardware emulation later. Hardware emulation requires that you use the games original Glide library, and not the special one used for pass-through.

Windows: Installing glide2x.dll

Note
Although this library has the same filename as the old Windows Glide library for real 3dfx Voodoo adapters, it is in fact not the same. The library used here converts Glide calls to a newer 3D API, and will not work with a real 3dfx Voodoo adapter. It may be possible to use a real 3dfx Voodoo adapter with the original glide2x.dll with the right hardware and software setup, but that has not been tested.

There are several implementation providers for the Windows glide2x.dll library file, most notably nGlide, dgVoodoo, Glidos, and OpenGlide. They do not necessarily work exactly the same. Before trying to find an implementation of this library file, please keep in mind that the architecture of the DOSBox-X binary you are using does matter, e.g. whether the DOSBox-X executable is a 32-bit x86 or 64-bit x64 build. Due to the way how Windows works, 32-bit glide2x.dll can only be used by 32-bit DOSBox-X binaries, and 64-bit glide2x.dll can only be used by 64-bit DOSBox-X binaries. As a result, in order to make Glide work please make sure that you do not mix up the architectures of the applications and the .DLL files.

nGlide appears to be a popular 3dfx Voodoo Glide wrapper provider to Direct3D or Vulkan for Windows XP and later. It comes with an installer to automatically install the Glide library files including glide2x.dll to your Windows directory. Note however that only 32-bit .DLL files are included in nGlide, as of its latest version. This means that if you choose to use nGlide as the Glide wrapper, then you must use the 32-bit (x86 architecture) DOSBox-X binaries (either SDL1 or SDL2 builds) for the Glide feature. The nGlide installer is available from:

dgVoodoo is another 3dfx Voodoo Glide wrapper to Direct3D provider for Windows. Unlike nGlide it does not come with an installer as of this time, but it does provide both 32-bit and 64-bit glide2x.dll files in its zip packages. Thus with this you can use either the 32-bit x86 build or the 64-bit x64 build of DOSBox-X for the Glide feature, as long as the correct glide2x.dll file is available to the DOSBox-X executable. You can put the glide2x.dll file (extracted from its zip package) either in your DOSBox-X directory, or in the Windows’ System32/SysWOW64 directory (in the case of 64-bit Windows, C:\WINDOWS\SysWOW64 for 32-bit glide2x.dll file and C:\WINDOWS\System32 for 64-bit glide2x.dll file). The zip packages are available from:

Furthermore, for advanced users you can build your own glide2x.dll file(s) if you wish. OpenGlide is an open-source Glide wrapper to OpenGL implementation, so that you can build the library file(s) from the source code by yourself, using Visual Studio or MinGW. The OpenGlide GitHub site is located at:

Linux: Installing libglide2x.so

Note
Although this library has the same filename as the old Linux Glide library for real 3dfx Voodoo adapters, it is in fact not the same. The library used here converts Glide calls to OpenGL, and will not work with a real 3dfx Voodoo adapter. It may be possible to use a real 3dfx Voodoo adapter with the original libglide2x.so with the right hardware and software setup, but that has not been tested.

Unfortunately this library is not included with any of the modern Linux distributions, as such you need to compile it yourself. The following steps assume that you have the necessary compiler, developer tools and header files already installed.

Run the following commands from a Linux terminal:

git clone https://github.com/voyageur/openglide.git
cd openglide
./bootstrap
./configure
make
sudo make install
sudo ldconfig

libglide2x.so will by default be installed in /usr/local/lib which may or may-not be in your default library path. To check if ldconfig found the library, run the following command:

ldconfig -p|grep glide

You should get an output similar to this:

	libglide2x.so.0 (libc6,x86-64) => /usr/local/lib/libglide2x.so.0
	libglide2x.so (libc6,x86-64) => /usr/local/lib/libglide2x.so

In the above example it found the libglide2x.so library. If the ldconfig command returns nothing, you need to add the /usr/local/lib directory to your library path and re-run ldconfig as follows:

sudo sh -c 'echo /usr/local/lib > /etc/ld.so.conf.d/usr-local-lib.conf'
sudo ldconfig

macOS: Installing libglide2x.dylib

instructions needed…​