First post, by ElTentakel
Glidulator GL-1 0.9.0 (preview) - a software implementation of the 3dfx Voodoo Graphics and Glide 2.x for real DOS and Windows 95/98/ME.
"The Voodoo-compatible 3D accelerator that fits in a single file. No add-in board. No pass-through cable. No jumpers."
Hi everyone,
Up front, in all honesty: this project would never have been possible without AI. A large part of the code was written together with an AI assistant. If that's not your cup of tea, no hard feelings - there are plenty of Voodoo 2 cards out there that maybe Glidulator has just made obsolete.
For everyone else: what if a modern PC booting plain DOS could run the 3Dfx versions of games and demos without a Voodoo card? That's what Glidulator does. It replaces GLIDE2X.OVL (DOS) or glide2x.dll (Win9x), and the game renders through a CPU-based Voodoo Graphics instead of the real card.
How it works
- Glide calls program the same Voodoo registers that 3dfx's driver did. A register-accurate rasterizer ported from 86Box then draws the triangles: perspective-correct textures, mipmaps, Z/W buffer, fog, alpha blending, NCC/YIQ textures, the 4x4 dither, and the RAMDAC gamma.
- Unlike Glide wrappers, it does not translate to Direct3D/OpenGL. It needs no GPU driver at all, which is the whole point under real DOS.
- x86 JIT: the pixel pipeline is compiled to SSE2 code for each render state.
- Multi-core under DOS: the OVL starts the additional CPU cores itself (INIT/SIPI) and uses up to 4 of them as render workers. This works on plain DOS / HIMEM, and also under SBEMU with HDPMI32i (ring 3, on the host's page tables).
- Output via VBE 2.0 LFB with aspect-correct scaling to any mode, with a VGA mode 13h fallback. Write-combining via MTRRs on real hardware.
Optional extras (all off by default)
- FSAA like the Voodoo 5 (2x/4x rotated grid, or auto)
- The Voodoo Graphics video output filter for the authentic "Voodoo look"
- A CRT effect that makes the screen "lock on" like an analog monitor when the game switches to 3D
- 3dfx's spinning logo, read from an original GLIDE2X.OVL/DLL you already own (nothing from it is executed)
- An OSD with fps, render path and thread count
Tested
DOS: Nature, Dimension, Shortcut, Trip, Fucktory, GTA, Burnout, Archimedean Dynasty (menus)
Windows: GLQuake (with the original 3dfx MiniGL), Nature95, Formula 1, Uprising, all 7 entries of Operation 3DFX '98
Real hardware: Core i7-4770T with FreeDOS and Windows 98SE. Under SBEMU + HDPMI32i, Nature and Dimension run with 3 render workers and the JIT.
About performance: so far the focus has been on correctness and compatibility, not on speed, so there are no benchmarks yet. The OSD (GLIDULATOR_OSD=1) shows the frame rate if you're curious, and numbers from your machines are very welcome.
Requirements
CPU with SSE2 for the JIT (it also runs on a 386, just... don't). For multi-core under DOS: no memory manager, HIMEM only, or SBEMU with HDPMI32i. Under EMM386/VCPI and in the Win9x DOS box it falls back to one core.
Known issues in 0.9.0
- Win98 + GLQuake: the picture can freeze in the attract demo behind the main menu. Press Enter and it continues.
- Single-pixel gaps on shared edges of triangle fans
- grAA*, guMP* and guTexCreateColorMipMap are stubs (no tested title uses them)
- SBEMU with the VDPMI pre-release is experimental; HDPMI32i works
- Win9x only uses one core (OS limitation)
- Games with statically linked Glide (e.g. the 3Dfx Tomb Raider, Carmageddon) cannot be supported this way
Download & source
Release: https://github.com/ElTentakel/Glidulator/releases
Source (GPLv2): https://github.com/ElTentakel/Glidulator
The package contains Release, Trace (performance log) and Debug (crash handling, frame capture) variants, plus a commented GLIDULAT.CFG with every setting.
Feedback very welcome!
I'm especially interested in:
- other DOS/Win9x Glide 2.x games: does it work?
- real-hardware results: CPU, chipset, memory manager, and what the OSD shows
- results with SBEMU on different sound chips
If something breaks, please run the Debug variant and post the GLIDULAT.LOG (here or as a GitHub issue).
Thanks to Sarah Walker and the 86Box team (the rasterizer this is built on), ranulphus/MGA-Glide (clean-room Glide 2.x ABI description), sezero for the Glide source mirror, crazii for SBEMU/VDPMI, and Japheth for HDPMI.