Fun fact: of the 1.2GB of Linux kernel source, a whole 200MB and all of the largest files are register bit definitions for AMD Radeon cards. This is because they are auto-generated, and contain bit definitions for every *instance* of every hardware unit, across many generations.
You can tell it's repetitive and information-free, because all 200MB of it xz-compress down to... 3.7MB (1.8%).
The rest of the kernel drivers tree (516M) compresses down to 67MB (13%), for comparison. So these files are 30% of the source, but only 5% of the information.
The rest of the kernel drivers tree (516M) compresses down to 67MB (13%), for comparison. So these files are 30% of the source, but only 5% of the information.
The amount of information is probably much less, because compression algorithms are good at compressing repetition, but not that good at compressing numeric patterns (e.g. incrementing numbers), which these things are full of.
This kind of horribleness is common in large companies, yet any sensible engineer would agree it is ridiculous (it serves *no purpose* to have those duplicate defs, and makes this unmaintainable without having the entire generation stack).
This is why AMD needs hundreds of engineers and a good fraction of them are probably working on drivers, while just a few skilled people can put together working open source reverse engineered GPU drivers. Corporate structures tend to create *massive* overhead and silliness.
My gut feeling is Apple is leaner in this respect, and gets by with smaller teams, but also overworks them more. We'll see just how sane or not their GPU design is.
Another reason why AMD needs hundreds of engineers is that AMD's drivers aren't "a driver", they're an entire from-scratch 3D graphics, encoding, decoding, display controller, modesetting, etc stack. Just like Nvidia's. Probably 80% of the code is accomplishing the same tasks.
Open source drivers share all the common code, which is already there, and only add support for the specific hardware involved.