|
某人说:
开源驱动?老实讲,现在X的开源驱动压根就是个笑话,不管是xorg-video-intel/ati/radeonhd/openchrome /sis……中的哪一个,根本就不能提供硬件3D加速功能!我们在使用他们,同时开OpenGL 3D应用时,系统实际上是调用Mesa这个软件OpenGL库来实现的——也就是说,我们花了银子买的GPU根本没排上用场,都是CPU在算!现在知道为啥开3D时CPU使用那么高了吧?
再说闭源驱动,ATI的闭源驱动是实现了硬件加速机制,但ATI的闭源驱动之烂是众所周知的,除了ATI自己的硬件设计不过关(了解情况的都知道,ATI卡的编程容错度极低,各种3D编程到了后期出的硬件兼容问题几乎都出在ATI卡上,做3D的程序员都恨得牙痒痒)以外,主要就是因为 DRI/DRM自身机制就十分混乱。而nVIDIA的闭源驱动质量很高,可是那是怎么实现的呢?听起来就是个极大的讽刺——nVIDIA的闭源驱动完全绕过了DRI/DRM!实际上,它hack了X,替换掉了X底层的许多东西,自己实现了类似于DRI/DRM的功能。
这里面的根本原因在于,在GEM出现以前,只有nVIDIA的驱动拥有一个统一的显存管理器,如果没有显存管理器,你就不能分配离屏缓存,那么不仅没有FrameBufferObject、甚至SGI上个世纪就提出来的Pbuffer都不能用,硬件OpenGL和DirectX加速都只能是做梦;没有“统一”的显存管理器,2D和3D就无法协调,也就不可能有重定向直接渲染——开了Compiz,视频和OpenGL程序如GoogleEarth就得出毛病。
现在Intel搞出了GEM,一个基于Linux内核的显存管理器,从长期来讲,这是正确的,因为X应当做到硬件无关,把显卡、输入设备、PCI总线管理这些部分模块化,在内核提供这些功能的OS(如Linux)上不使用它们——现在的Linux为了避免和X在硬件管理上发生冲突,不得不搞了很多协调机制——只在那些没有这些功能的OS(如*BSD)上启用它们。但是老实讲,这对nVIDIA很不利,如果nVIDIA要把自己的闭源驱动里那个显存管理器移植进内核,就得把源代码按GPL公开,那么nVIDIA辛苦开发的跨平台驱动代码库(nVIDIA不同平台的驱动有90%是共享的代码)的很大一部分,就得公之于众了。
之前内核中已经有一个Tungsten Graphics(也就是Mesa的开发公司,现在归VMWare)提出的显存管理器TTM,但是没有驱动使用它,Intel搞了比较简陋的GEM以替代,据说是这么个办法:“实现一个驱动。当其他人实现了另一个驱动,又发现这里面有些代码应该是公共的,那么就将它移动到支撑库里并共享它。 ”不过这只是暂时的,因为一开始开发者觉得TTM太复杂,难用,后来逐渐摸清情况以后,确定TTM考虑周全,而GEM根子上只适合于Intel显卡,于是还是用了TTM,只不过使用了GEM到TTM的转换,也就是说接口用了GEM,但是实现用了TTM.
关于nVIDIA闭源驱动不支持GEM/KMS和DRI2的问题,老实讲,现阶段没什么意义。GEM的原因很简单,如上所述,nVIDIA自己实现了显存管理器,无非不是在内核里实现的,而把它放在内核,眼下除了KMS和基于它的Plymouth以外,看不出有什么价值。DRI2的话则根本没有意义,因为这个无非是增加了重定向直接渲染,而这个nVIDIA自己早就实现了,尽管手段不太正经(Hack了X)。所以,我劝诸位老老实实地用 nVIDIA的闭源驱动,别抱怨这抱怨那的,Intel和ATI的开源驱动和开放文档?那是耍你们好玩呢。 |
|