Doesn't the 3D work very well out of the box with Mac?
"Ripping closed source" means reverse engineering the closed source driver. That's what the people of the nouveau project are doing on the nvidia Linux driver. All that because nvidia refuse to publish the hardware programming manual of their GPUs. This is a gigantic loss of time. I would not be surprised if some companies with an interest of slowing down GNU/Linux on the desktop are behind all this.
Remember: the target is to have by default open source OS installed on systems with optimal code driving your hardware.
I don't mind, I will code other drivers more fitted to the Linux kernel (license wise and code wise). We can share hardware programming knowledge but code will be different.
What I can do, is take their code from a certain point, re-license under GNU GPL and obliterate cross-kernel code. It is *not* like closing the code: aka the ultimate treason.
- Bandwidth. Do I have enough memory bandwidth in this power state to properly feed all active displays as well as the drawing engine? Not enough bandwidth can cause drawing stalls or glitches and blanking or flickering of the displays.
- Frequency. Is the current clock rate high enough to finish the current operations within an acceptable time window? Often, it's a better user experience and saves more power to bump the GPU to a higher power state than you might think so the operation finishes sooner. Set it too low and performance will suck.
- Thermal/fan controllers. These are 3rd party chips connected via i2c. Drivers need to be written for each of these chips before they can be used. Then you need to wire them up to some interface so you can access the information. There are existing drivers for some of these chips, but we need to write a radeon i2c algo module to expose the radeon i2c buses so they can be used by other drivers. This in itself is a fair amount of work.
- Power mode changes. This needs to be done during the blanking period or when the displays are off to avoid visual glitches. Often the latencies required make it hard or impossible to fit this into a vblank period.
Thanks for exposing these problems and thoughts behind the code. It's quite interesting.