This driver might come as a surprise, 21 years after the last 3DFX card released, but it makes it possible to run programs targeting this family of GPUs on top of any Gallium driver (so far I only tested iris and radeonsi).
This is the second attempt at making a Gallium frontend in Rust, the
first one being OpenCL by karolherbst. I tried to make a clear
separation between the C API exposed to the user (in
src/gallium/targets/glide), and the inner driver (in
src/gallium/frontends/glide). The inner driver uses raw bindings
bindgen to expose the Gallium C API to Rust (see
bindgen.h), a higher level and safer wrapper on top of
pipe.rs), a definition of the Glide types (
gr.rs) and the actual
There is no winsys integration so far, mainly because I could find no
Linux game (Unreal and Unreal Tournament apparently got Linux builds,
but I couldn’t find them so far), and also because I couldn’t figure out
how to create a dll for use in Wine, with winebuild, even with the help
of wine-nine-standalone. As such, the only interface with the user so far is dumping
frame-%03d.bmp files in the current working directory…
I have restricted the implemented APIs to the programs I had at hand,
mainly some samples and a game, Pandemonium!. I’m sure I still have
some CDs around with other games from this era, but so far couldn’t find
them, so if you have more I’d really like you to send me a trace using
grtrace (see the next two commits), or even a donation on GOG.com
(username: linkmauve) or whatever. If you don’t have any game to test, you can replay this trace of Pandemonium: pandemonium.grtrace.zst
All in all, I don’t expect this driver to be used much, I mostly wrote it for fun and in order to experiment with Rust inside of Mesa, but I do intend to maintain it and eventually to make it support all APIs used by all games from that 1996-2000 era which targeted it.
I’m also interested in getting a donation of any 3DFX card, so that I could test that this driver actually respects how the games were made to look like.
Feel free to get in touch at xmpp:email@example.com?join (or using a web client).
Have a screenshot!