- use the GL 1.5-ish code paths by default (which worked on all drivers) and make GL 2.x code paths a user option
- use a (DX9-ish) subset of GL 2.x which could be supported on all of the hardware where that level of support was exposed
- use a small set of functional tests rather than blacklisting, discussed with driver devs to use what "should work", driver devs would prioritize anything that crashed those tests
- work with the driver devs to identify a set of extensions/levels which could be used to identify drivers that would work well with KWin
- in the worst case, whitelist for GL 2.x code paths rather than blacklist
I don't know how you do function tests with partly unstable drivers? Like for example nouveau, when i try the dx10+ cards then these work fine. dx9 however have got no problem with basic kde effects, but as soon as i try a game (with kernel .39) then the driver will crash. So how does your function check look like in that case? Test something and see if there is kernel oops? Something similar you find with other drivers certainly too, on some days r600g git was extremely unstable too... The best way is to know first that the driver works, therefore whitelisting is not that bad. Of course using an environment var to disable the opengl checks is a bit complicated. At least when you don't know it - usually you can not see in any gui use this var to override those settings. With kde 4.4.5 there was at least a menu option that disabled those checks. In case of bad drivers (which did not fully crash the system) you could at least press alt+shift+f12 to get from a black screen to 2d desktop. Of course if your system crashes after login you have to find the configfile to disable the setting, also not that simple... In a perfect (driver) world everything would just work and be stable as advertised, but in reality this it not always the case.
Can I ask a question to Martin, "what has been your best ever money saving tip?"
The drivers are supposed to report what features they support, and Kwin tried to do the right thing by querying the drivers. However some drivers crashed when queried. Other drivers would claim to support features, then crash when those features were used. To work around these mesa flaws Kwin instead used the drived identification strings. The mesa devs complained about this, but didn't offer Kwin any workable alternatives.