I have been involved with the opensource community for some time and I have spent a lot of time messing with OpenGL (programming related). Over the years, I have heard things like ATi, Intel promoting, using open drivers, open specifications and people claiming they are superior for this reason.
However, if it’s so superior, why is it not one of these drivers, but nVidia’s fully support:
- OpenGL 2.1 with full hardware acceleration
- GLSL (OpenGL’s shader language) with full hardware acceleration
- pbuffers with full hardware acceleration
- Framebuffer objects with full hardware acceleration
- GLX 1.4 with full hardware acceleration
- Redirected Direct Rendering with full hardware acceleration
And before anyone tells me, Mesa doesn’t count – Mesa uses a software renderer. The problem is, none of the opensource drivers and any drivers that use the ‘correct’ specifications for driver hooks with x.org can do it all. It is currently and utterly impossible with the current state of x.org.
nVidia’s drivers just bypass the entire thing. X.org was built on a system that allows completely overridable function tables, granting the capability for a truely modular system for those ‘just in case’ scenarios and what a mighty grand feature it is, because the nVidia drivers essentially just hook into so many pieces of x.org that barely nothing of the original X is left. There was no better way to implement full support for the above, DRI and DRM, having to full back onto such ‘dirty’ methods.
The major difference between X’s with it’s (semi-)opensource drivers and nVidia’s driver is that nVidia actually has a full, unified, hardware accelerated, memory manager. Without a memory manager, it’s practically impossible to allocate offscreen buffers, which prevents the use of fbos, pbuffers or even unify 2d and 3d accelerated rendering together (no redirected direct rendering).
Meanwhile, I have to listen to people in the opensource community raving about stuff like AIGLX (indirect GLX rendering), completely confusing the situation. The indirect rendering technology is when 3D accelerated applications delegate all their functions completely unaccelerated to the X server instead of talking directly to the 3D driver. Because in the current X implementation, only one thing can be accelerated at a time without a memory manager.
Once the X server receives the indirectly rendered items, it tires to accelerate it by passing it to the 3d driver, however, this suffers performance issues due to technical implementation issues from indirect rendering. By forcing all 3D applications to use indirect rendering, it avoids the whole need for a memory manager because the X server behaves as a catch all point for all 3D and 2D rendering.
People in the opensource community claim that there is no real performance penalty because of certain accelerated features, despite the fact 3D applications are just slowed down because they have to use non/semi-accelerated indirect rendering (depends on the driver). During this time, nVidia has been providing a driver all this time that could do hardware accelerated direct rendering and redirected rendering (as opposed to indirect), all these numerous features. The opensource community have been ignoring the issues with X and stuck to the strict guideline of how drivers are “supposed to be built” and have made large workarounds with the current architecture rather than redesigning the driver API model to fully accommodate changes that the nVidia driver does.
x.org is trapped in it’s situation where they cannot change the way certain things are done, because of vocal powers in the foundation that demand that things should stay compliant to a specification and they should work around the architecture rather than strip out certain pieces and implement them, add proper new features (memory management and API functions to go with it). nVidia in the meantime just hook into so many parts of X, that the driver itself just practically replaces major pieces of X.
So, here I sit on my nVidia powered laptop, I have GLX and AIGLX disabled (they’re enabled by default in Kubuntu intrepid), despite having certain kwin features enabled which require features from AIGLX/GLX and my system currently has better performance without GLX/AIGLX enabled since the nVidia hooks in x.org provide all that and far better acceleration.
I have no weird performance issues, I don’t have odd CPU usage issues with X or plasma/kwin/compiz (if you do with a nVidia card, disable GLX/AIGLX) and I don’t have odd glitching which tends to be common with other drivers.
Funny note, my Windows games that I run under Wine/Crossover games actually are performing better with better quality than under Windows, despite the fact that wine/Crossover games has actively translate DXSL to GLSL in realtime, not have a graphical interface in ring-0 like Windows, but this might be purely due to the fact I use a nVidia driver on Linux.
While you recently had your problems on the run, they’ve regrouped and are making another attack.