The community-created Nouveau driver that’s open-source and is written by clean-room reverse-engineering the NVIDIA binary display driver, has reached a serious milestone. For low-end NVIDIA GPUs, the Nouveau driver based upon the Mesa Gallium3D architecture is now as fast, or even faster, than NVIDIA’s official proprietary driver.
I’d like to thank the Nouveau developers for doing this very important work; it is great to see such efforts coming to fruition after many years.
A good open source 3d driver seems like it must be one of the most important and, so far, difficut, features to be incorporated into hobby OSes. Of course, it is great for the open source *nixes as well.
I can’t wait till I can read reviews of a decent modern graphics card working fully with open source drivers. There is a risk in running a proprietary graphics driver that a kernel update or xorg update can leave you without GUI and that just isn’t acceptable. I remember a few years back the first thing I did after getting the system working nice with proprietary graphics was lock down all the kernel, xorg, and graphics packages so they couldn’t update. I had broken too many installs and not taking patches if I wanted 3d became the norm. It seems like things are better now, but I know that I’ll feel safer when my drivers are open source.
Edited 2011-03-21 22:45 UTC
I remember back in my days, like almost 20 years ago, page flipping in VGA was as simple as setting some register in a video card port, one or two lines of code.
OSs and hardware sure must have become very complex and abstracted if so much work was needed to implement this feature
Well, VGA memory was a linear set of memory and all the data there was simply either character data or pixel data, nothing else. With 3D graphics however the data can be one of gazillion different things and handling the memory ain’t even nearly as straight-forward, it isn’t even linear in every case, and thus the method VGA-compatible cards use can not work. Ie. you can’t just swap screenres_x*screenres_y*bitdepth worth of bytes in one direction in the memory and expect to get any sane output.
Besides, the kind of page-flipping VGA uses is still equally-well possible in non-3D mode with linear memory mode even at higher resolutions, though it isn’t accessed the same way any more.
VGA isn’t (quite) linear – it’s bit planes.
You need to select which bit planes you want to read/write from. Quite useful for fast fills (4 times faster?). At least that’s how the 4 bit/pixel stuff worked. CGA legacy is/was fugly. I think the only mode that was truly linear was 0x13 (320x200y8bpp). All the ModeX/ModeY stuff was bitplanes too as there was only a 64K hole in memory for the graphics adapter (0xa000:0000 I think…) there were other holes for CGA/EGA and chums. If you like there’s a third parameter along side X and Y (and base address, stride etc)
PITA really but somehow we coded decent graphics routines for it. It has some advantages (fast fill and using the internal latch for fast intra memory copies)
The most typical memory styles found in modern GPUs is “tiling” which chops an image into X by Y pixels (X and Y are typically the same and a power of 2) to increase pixel locality – that is pixels near each other are nearer using this technique than a purely linear layout.
It’s something like address = (x >> 4) * tileStride + (x & 0xf) * pixelStride + (y >> 4) * (16 * tileStride) + (y >> 4) * intraTileStride. (I’m sure that’s wrong!)
Looks painfully difficult in software but in hardware we’re just swapping chunks of bits in the incoming X and Y coords – like bits 0..3 for 4..7.
All of which makes me think… Why the hell do I still remember this stuff but can’t remember what I had for dinner yesterday…. Hmmm….
There’s a few things that I wonder about: will Nouveau ever get CUDA support or is there something barring that, and since OpenGL 2.1 is seriously outdated what is needed for newer versions to be supported?
I’m not sure about CUDA, but OpenCL is a possibility, someday, in the future, maybe. Adding support for a new Gallium state tracker is “relatively easy”, and there is some work going on to make an OpenCL state tracker, so if it reaches an usable state, nouveau may be able to support it.
There is another driver forked from nouveau, that aims to support GPGPU: pscnv
https://github.com/pathscale/pscnv/wiki/
Their objectives are very different than those of nouveau, but they seem to be collaborating with each other.
As for OpenGL there is a bigger problem, patents. Some parts of newer OpenGL are patented, and can’t be distributed freely, as is the case for S3TC (S3 Texture Compression). There is a discussion in the Mesa mailing list about adding support for patented stuff, and disabling it by default, so whoever wants to use it, has to compile and enable them specifically, but even if that’s the case, most linux distributions would leave them disable due to possible legal issues.
Thanks for the explanation, I wasn’t aware of patent issues. I always thought OpenGL was implementable by everyone without having to worry about such.
So basically this means that Linux will never be suitable for gaming unless you’re using binary blobs. With more and more games simply requiring features OpenGL 2.1 doesn’t support Linux will be left completely behind. Sucks.
PS. I really, really wish software patents would die.
Edited 2011-03-22 00:20 UTC
Is there a web site that lists what is patented and what is not in the different OpenGL versions? Something simple like how OS X lists what is supported and what is not would be nice.
I do not do graphics programming but if more and more things are patented then OpenGL will have to be changed to ClosedGL.
Why so? Open means there is an open standard everyone can access, implement and test against a reference implementation.
It does not mean it is free.
If it isn’t free then it’s not implementable by everyone, free being both libre and gratis: if you are required to pay someone to be able to implement the standard then it clearly cannot be implemented by everyone, and if it or parts of it are patented then you still need to get a license to use the patents.
Open standard means more than “access, implement and test against a reference implementation” because anyone can do that (in house) even with proprietary technology. IP laws (trademarks, patents and copyright) only kick in to effect when one attempts to distribute, or re-distribute a work. If you cannot re-distribute a work (modified or not) because of license restrictions, then the original work is not open. One doesn’t have full permissions to use it.
This is why organisations more and more are beginning to clarify that when they say “open standard” they explicitly mean “royalty free”.
http://www.h-online.com/open/news/item/UK-Government-defines-open-s…
Commercial reasonable and non-discriminatory (RAND) terms are accepted by some standards bodies, such as ISO and ECMA, but the common understanding is that RAND standards are not “open standards”, they are “RAND standards”.
Edited 2011-03-23 22:24 UTC
On the good side, you are not requiered to keep <3.1 compatibility in the new spec. So they could implement GL3+ as a separate backend.
From what I understand that is pretty much what Apple has done with OpenGL 3.2 in their Lion Developer Preview. OpenGL 2.1 will reside in its own library and if you want 3.2 you have to explicitly specify it rather than one automatically inheriting the features.
Please I sure hope Phoronix does a revisit when the Nvidia Binary is released.
That “gap” will widen once more.
Well, the article means that its close… on older video cards. For the newest ones… Nvidia’s kills the open source one. I really doubt that Nvidia is going to spend much resources optimising their driver for older cards. So the gap for those cards it was close for, probably won’t change.
In any case, its an amazing achievement. Nothing wrong with giving props to a group doing an incredible job, even if it isn’t yet as good as the competition.
No, nvidia doesn’t care about older nvidia cards. Officially the older ones are not even supported by the most recent releases, so it is not hard to imagine Nouveau doing better. The Nouvea drivers are already several orders of magnitude faster for 2D graphics, another area NVidia doesn’t care about.
I’ll love the heck out of my old PC with an old NVIDIA card whenever Gallium3D gets ported to Haiku. My old Athlon XP 1GHz CPU can’t quite handle the 1920×1080 resolution on my 24″ monitor.
I know I’m ready for some accelerated Haiku video goodness! I have an old 1.2GHz Athlon based system with an Nvidia GF2MX card just itching for a Win98/Haiku dual boot install. Classic Windows gaming and a modern BeOS clone, here I come!
May I join the party? I have a K7 Thunderbird @ 900 MHz, 256 MB of RAM, now coupled with a GF4MX 4000 (after years of waiting…. I have finally played HL2 and Doom3!).
I multiboot between WinFLP, Haiku R1, and a couple of BeOS partitions (one from 2002).