Skip to content(if available)orjump to list(if available)

Nvidia publishes 73k lines of 3D header files for Fermi through Ampere GPUs


Can someone knowledgeable about the space please help me understand why this is important?

The article discusses this with regards to "Nouveau", which seems to be an open source Nvidia specific driver -

What do these 3d header files do, and why/how will this make life easier for "Nouveau"? Finally, why (aside from just open source being the best source) will this benefit people like myself who don't understand what just happened?


When looking at a binary blob for the driver, the person writing the docs of what the driver does sees "jump $addr1" but they don't know what's at the other end. To write the specification for the clean room reimplementation, they need to read the destination assembly and document that.

This provides documentation on what is at the other end of the address and what it does, and what the layout of each parameter is.

That means they will hopefully avoid having to recurse and understand all of the binary code to write the specification.


That's not exactly correct. This is register maps for the 3d engine (also called class), what you describe would be closer to the shader ISA.

In driver code you'll see them building command buffers that set registers in those classes to certain values. It could be the RGBA values of the clear color, or a virtual address in the GPU space.

This documents the names of these registers. This makes reverse engineering somewhat easier as you don't really have to guess anymore. But in most cases it was pretty clear from the start, and for some generations those were already well documented by open source efforts. One of best known gens is probably Maxwell since it was used in the Nintendo Switch, see for instance [1] (or code in yuzu/Ryujinx) which is the equivalent of those headers NV published.

However this isn't a very big step in documenting their GPUs. The exact functions of those registers aren't explained, but most importantly the shader ISA isn't documented at all, which is essential to build a good open-source driver.

Source: I have reverse engineered some driver code for Maxwell (and used similar headers to write drivers for nvdec and nvjpg).



You say this isn't a very big step - out of curiosity, how much work would have been involved in getting this release open sourced? And what might be preventing them from releasing the shader ISA?

Specifically curious if this inherently would "let the cat out of the bag" about the specifics of their chip design, for example.


Inside just about every Nvidia GPU there's a bunch of little engines they internally call classes. This documents the 3D graphics rendering engines' method calls (the commands in the physical GPU command list) and memory layout for instances of these classes.




basically they just published a large amount of API for developers to use


The headers are here in HTML-navigatable form:

More specifically, I guess these are the new release:


GPUs are the most complex chips out there. Getting dumped on the head bazillions of registers won't do as a hardware programing manual. Saying otherwise is a sham.

If their hardware is less messy than amd one, this hardware programming manual should include:

1 - a host init part: upload the firmware files (I can feel the gaze of the open source zealots). Since those chips are the most complex ones, you need some software jingle room to "fix" bugs in the hardware programming interface. Then setup the command ring buffers (look at usb xhci and or amd hardware here). With huge pci "bars", you may be able to simplify some things here, and I think it is kind of done now, but I don't recall the marketing name.

2 - the full hardware programing manual of the 3D/compute pipeline, done via those very command ring buffers. That include the setup of gpu virtual address spaces for shaders (last time I check amd hardware had 16, namely don't run more that 16 GPU "tasks" at the same time...). That with full shader ISA documentation (amd doc an that matter is amazing, but the documentation on how the 3D pipeline uses this ISA is kind of shaby).


When Nvidia published their open-source GPU drivers, there was a huge amount of moaning by free software absolutists about how it didn't really count because they just moved a bunch of logic into the firmware, or weren't open-sourcing CUDA, or whatever. Nvidia folks always responded with "our open-source journey is just beginning, but stay tuned!"

I know Nvidia doesn't have a lot of goodwill in the open-source community, but it's good to see that steps in the right direction are continuing!


> there was a huge amount of moaning by free software absolutists

I'm kinda glad that happens, even though I don't participate and the pragmatist in me sometimes disagrees.

I am glad Stallman exists and maintains his ultra-absolutionist hard line. I respect hom greatly for that, and while I often roll my eyes at his intentional foot-gunning of his own use of technology, I also 100% believe he's done an order of magnitude more to improve society than the more pragmatic open source advocates like esr.

In my head, the opposite end of the bellcurve is companies like Oracle. And they're _way_ better funded and more politically powerful than Stallman or esr or the entire "open source" movement put together. Without "extreme fringe wing nut GPL virality advocating loudmouths", Larry Ellison will drag software philosophy "the middle ground" so far to his end that we will all lose out.

So big shoutouts from me to the free software absolutists, even if I don't join in on your chorus (or internet dogpiles). My personal software philosophy probably is grounded in my mid 90's Perl hacking, and I'm very much behind Larry Wall's GPL/Artistic dual license approach. (I do though have ongoing doubts in my head about whether or not the recent spate of "non-open source" licenses aimed at restricting the cloud hyper scalers from SaaS-ing your stuff without contributing anything at all. I respect what they're trying to do at Mongo and Redis. I'm not sure if it will (or even if it should) work.)


> I am glad Stallman exists and maintains his ultra-absolutionist hard line.

I’m glad too. Whenever I read some of his writings, I cannot stop the feeling that he had bee right all along, and had seen most of the current dystopia coming, something like almost 20-30 years before it happened.


Stallman’s hard line is pretty incoherent / absurd when it comes to firmware.

The FSF does not care about proprietary firmware, provided that the firmware “installation is not intended after the user obtains the product.”

So if you have a product that needs a ton of proprietary software to run, RMS will go berserk if you run that software on the CPU, but if you shift it to run on another processor in the product and make sure users can’t change it then all is good, have a RYF certification. This does not make sense. Maybe it made sense 30 years ago.

If you’re stallman, proprietary firmware isn’t bad so long as it’s suitably hidden so it can’t offend your sensibilities. So pretend CPU microcode updates don’t exist and add secondary processors to deal with blobs (purism). Does ensuring users cannot upgrade firmware make them more free?


I agree about the eye rolling absurdity there. But I also suspect stuff like the opening up of various bits of RaspberryPi firmware blobs wouldn’t have happened without people who share his philosophy there. Same with hardware (and software) like Bunnie Huangs Precursor, a piece of as close as practically fully upon source hardware, where the cpu is implemented as an open source FPGA, and the Xous OS for it is written ground up in Rust. That’s a hell of a complex project, and a fascinating , that in my opinion would probably never have been worth anyones time to even start on, if they didn’t share (and possibly exceed) some of Stallman’s philosophical absurdity.

Like I said, I acknowledge the “ extreme fringe wing nut GPL virality advocating loudmouths” and appreciate their existence, if only as a balance to the “make Larry Ellison infinitely rich and powerful” kind of alternatives.


CUDA is their moat and their drivers do add significant value, seemingly more than AMD. So it's reasonable to expect that these won't be open sourced any time soon. Honestly I'm surprised why people expect them to just open source core IP like this.


Lot of disagreement as to if their drivers add any value.

I think a lot of folks are hoping to fix bugs in the Linux implementations for things like power scaling.

In cases like CUDA or OGL, it seems that the the kernel compilers are part of the driver package, which further confuses the discussion.


A driver only tells your computer how to talk GPU. How the GPU works internally is the real moat.


CUDA driver does memory management, scheduling, jit support and much more. It’s like a tiny OS.


Personally, my threshold for when they're off the shit-list is when they release the userspace component open source, when they support GBM, and when they stop actively sabotaging Nouveau. Maybe they'll get there, but I'm not exactly holding my breath.

That doesn't mean what they've done so far is insignificant. Being able to run an untainted kernel will be nice (for those running new enough GPUs anyways).


They did add GBM support, for what it's worth




The untainted kernel is reason enough to go Nvidia if you don't think ROCm is up to the task.


eh I think it's reasonable to have assumed they would continue to hold the stance that they had been holding for years. I'm sure the absolutists you talk about would be happy to be proven wrong.


A lot of people just blindly argue the absolute most negative possible stance period with NVIDIA, that they will never ever do anything positive and any positive stuff that happens doesn't matter at all because of reasons that are invented on the fly.

they open the kernel side? not good enough, they still have blobs (so does AMD) and the userland is still closed (which, so are parts of AMD's as well - the raytracing stuff is all behind closed licenses for example). They added adaptive sync support? Well, why don't they open up g-sync native!? Oh, they did that too? ....

it's similar to the anti-apple set that are just going to shit all over apple regardless of what happens. Apple publishes an API to make Asahi linux's job easier? Not good enough! apple is evil guys!

it's just so tedious and childish, like haha guys did you hear that linus gave NVIDIA the finger? that makes me laugh out loud guys!


> lot of people just blindly argue the absolute most negative possible stance period with NVIDIA, that they will never ever do anything positive and any positive stuff that happens doesn't matter at all because of reasons that are invented on the fly.

I mean, it's been what, 30 years or so during which nvidia did nothing on this front until ~last year? How are you even judging absolutists vs not? There's been no small steps you could judge them by, right?

But ya, I'm _super_ pumped nvidia is heading in the right direction with this stuff, I hope they continue.


The only childish thing here is what you wrote.

Nvidia's hostility to open source and Linux is well known. This is a company that signs code to prevent open source driver development. But now they want a piece of the sweet datacenter revenue, so they have to open up.


I've been buying Nvidia hardware to use with Linux since 2003 since pragmatically it works well but honestly their efforts towards open source are mediocre and unworthy of meaningful praise. While their are only 3 major players in this class its worst in class by a mile.

The combo of hardware/software if using open source drivers isn't worth buying or using. I don't think its at all meaningful to talk about progress until they at least offer something anyone ought to bother using.

I mean if I ordered a nice steak and you served me a literal shoe I wouldn't praise you for remembering to also bring steak sauce.