Skip to content
GitLab
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • mesa mesa
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 3,042
    • Issues 3,042
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 986
    • Merge requests 986
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Releases
  • Packages and registries
    • Packages and registries
    • Container Registry
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • MesaMesa
  • mesamesa
  • Merge requests
  • !14862

Draft: Grover: a new frontend for the Glide API!

  • Review changes

  • Download
  • Email patches
  • Plain diff
Open Link Mauve requested to merge linkmauve/mesa:glide into main Feb 03, 2022
  • Overview 43
  • Commits 3
  • Pipelines 1
  • Changes 24

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 generated with bindgen to expose the Gallium C API to Rust (see meson.build and bindgen.h), a higher level and safer wrapper on top of it (pipe.rs), a definition of the Glide types (gr.rs) and the actual driver (glide.rs).

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:glide@muc.linkmauve.fr?join (or using a web client).

Have a screenshot!

pandemonium

Edited Feb 03, 2022 by Link Mauve
Assignee
Assign to
Reviewers
Request review from
Time tracking
Source branch: glide