Introduction
New Drivers
Over the past few days we've seen a couple new drivers hit the net. You might have read in our news that Nvidia's new
3.68 Detonator drivers are now available along with new DLLs that allow you to bypass the Quake 3 VM code for a significant speed increase.
Shugashack has compiled a set of
DLLs, and
Barrysworld has a set of DLLs "optimized for P2+ CPUs + speed using VC++ 6.0."
The Nvidia 3.68 Detonator drivers are only available for TNT, Vanta, TNT2 and GeForce 256 based video cards. Officially, the drivers only support Windows 98 and Windows NT4, but we've found that the new 3.68 drivers finally offer satisfactory Quake 3 SMP performance in W2K. While a few of the older Detonator drivers were functional in W2K, none performed well with dual processors in Quake 3. The drivers worked, but frame rates with two processors were no better than single processor frame rates. Note that there are several different "leaked" Detonator driver versions, but the 3.68s are the only ones officially released by Nvidia.
The VM Stole My Mojo!
Id's John Carmack first explained the Quake Virtual Machine in his 7/24/99 .plan update:
The virtual machine interpreter is now completely functional, and cgame can
switch between being loaded as a binary .dll or an interpreted .qvm at the
change of a cvar.
The basic setup is that I have a modified version of the lcc compiler that
generates assembly files that are processed by a new tool "q3asm" into a
.qvm file that can be interpreted by q3. You can still use normal dll's
for debugging, then release interpreted code. You can release a binary
dll if you need some native system services (some networking stuff, for
example) or are doing very compute intensive work, but I strongly
encourage everyone to try to use the virtual machine.
The interpreted code has two prime benefits: portability and security.
User mods done with qvms will automatically work on mac, linux, and any
other oddball ports that get released.
A qvm program cannot modify anything outside its private address space, and
the "system calls" to the game strictly limit what can be touched. I was
scared about the binary dll's in Q2, but rationalized it to myself that people
running public servers should be aware of the dangers. With Q3 allowing
client side programming, it just needs to be safe for everyone.
Packaging is also improved somewhat, because the virtual machine programs can
be included in pak files and are automatically handled through the search
path.
Unfortunately, even after doing most of the straightforward optimizations,
the interpreter is causing a 20% slowdown in timedemos right now.
Test time
Even after optimizations, the VM still causes a significant slowdown. With the release of the Q3 gameplay source, people are now releasing precompiled DLLs that bypass the VM to avoid the frame rate hit. With the release of these DLLs and the new Nvidia drivers, we had to test them out for ourselves, and we decided to share the results with our readers.
Just to make things clear, Nvidia is not associated in any way with the Q3A DLLs. We just decided to kill two birds with one benchmark set.