谁是真正的DirectX9.0C显卡
今日硬件
谁才是真正符合DirectX9.0C规范的显卡?这在ATi发布R520显卡之后成为最红火的显卡类话题。nVIDIA的Fans们认定没有VTF的ATi显卡不是真的DirectX9.0C显卡,而ATi的Fans们则用DCT测试的结果进行还击,一时间两派Fans的争论闹得沸沸扬扬。
VTF的归属
Shader Model 3.0(简称SM3.0)到底包含些什么内容,这本来很多普通用户都不是特别关心。厂家说自己的产品支持SM2.0,那就是支持SM2.0,说自己已经可以支持到SM3.0了,那用户们自然也就相信了。但R520推出之后,VTF与R2VB之争,让大家重新开始思考无条件相信厂家是否明智。
VTF是Vertex Texture Fetch的缩写,指的是顶点纹理获取,而R2VB是Render to Vertex Buffer的缩写,它的意思是渲染到顶点缓冲区。在讨论VTF和R2VB之前,我们不妨来看看另一个词儿——Combo Shader。还在DirectX 8.0时代就有传闻:在DirectX 9.X的某个版本或者DirectX 10中,Pixel Shader和Vertex Shader将合二为一。
Combo Shader的出现绝对有道理,也应该是未来发展的趋势,但Combo Shader没有在DirectX 9.0C的SM 3.0规范中出现也是铁一般的事实。不过在XBOX360的图形显示部分,我们看到了ATi打造的具备Combo Shader特点的Xenos,而Xenos和R520又有亲缘关系。
谈完了Combo Shader,现在可以回头来看看VTF技术了。谈VTF我们要先确认两个事实,其一是在R520架构的Vertex Shader引擎里面,没有用于实现顶点纹理获取的硬件架构。另一个事实是,纹理获取功能不仅是Vertex Shader引擎部分需要,Pixel Shader引擎部分一样的需要,而且需要得更多。
对于R520缺乏实现顶点纹理获取的部分这个事实,目前主流的解释出自于ATi著名人士Humus之口。他指出,显卡设计中的VTF硬件部分,在SM3.0规范中只是一个可选的内容。也就是说SM3.0并不强制要求显卡具备VTF,不具备VTF的显卡也是符合SM3.0和DirectX 9.0C的。
SM3.0规范的确没有强制要求显卡必须设计VTF部分,ATi完全可以节约下这部分晶体管来用到其它地方去,在这一点上ATi是有点小聪明的。
在一个静态的3D场景中,3D模型一旦固定下来,顶点数目也就固定下来了,这并不会因为游戏的细节程度、特效和分辨率而发生改变。所以顶点引擎往往没有像素引擎那么繁忙,这是ATi敢于省略VTF在技术层面的原因之一。但没设计VTF部分,这并不意味着顶点纹理获取是没有用的。没有VTF,对于位移映射等技术将造成灾难性的后果,此时所有的工作将会交给CPU来做,这是难以接受的倒退。

ATi自然不会容许性能的大幅度倒退,它用R2VB来取代VTF。R2VB的原理也很简单,R520的Pixel Shader能输出包含4个FP32分量的128位浮点格式数据,把这些数据存放到4字符编码的顶点缓存,然后直接作为顶点数据传输给顶点着色器,这就是R2VB的全部。
替代者能否超越
Humus在解释中还指出,如果GeForce6/7系列显卡用R2VB而不是VTF的话,速度会更快一些。这是一个很惊人的说法,节约了晶体管效率还超越对手的话,VTF存在的合理性就应该很值得怀疑了。
从操作流程上来说,R2VB无论如何无法省略掉Pixel Shader到顶点缓存这个步骤需要的时钟周期,但这是比较固定的,而VTF需要的时钟周期变数较大。如果VTF设计得不够好的话,R2VB或许真能占一点上风;但是如果VTF有良好的设计,那么VTF的所有延时都可以在流水线中被消化掉,效率跃居R2VB之上也是有可能的。
更关键的是,VTF中纹理在Vertex Shader引擎内可以动态取样,顶点可以动态变更和加入几何LOD。而用R2VB就麻烦了,要做任何一个改变整个渲染过程都要跟着变化,灵活性就打了折扣。从功能上来说,VTF肯定超越R2VB。
看了理论也要看看实际产品,从GeForce 6800Ultra到GeForce 7800GTX,其中一个较大的变化就是VTF得到了增强。但是不论增强之前还是之后,nVIDIA的VTF单元在功能和性能上也并不强悍,只能抓取有限几种格式的纹理,在功能上即使一个最基本的对纹理的双线过滤也需要编程。在VFT单元中,nVIDIA的确如ATi所说的那样,大部分晶体管都用来存储纹理了而已。
看了技术本身和产品,我们还必须在实际应用环境中评价技术的性能。不管VTF是不是SM3.0的必要组件,但是它己经成为事实上的设计标准之一。如果游戏开发商没有针对R2VB作出相应的优化,那么玩家在游戏中将由于一些功能上的原因而面临性能损失。
到这里我们就可以针对Humus对性能的解释,进行进一步的分析了。从性能上来说,GeForce6/7系列显卡的VTF还比较简陋,如果有游戏支持的话,R2VB与之相比应该不处于下风。但是从长远来看,R2VB没有进一步发展的空间,需要游戏支持又是一个硬伤,而VTF却大有增强的余地。
DCT测试的迷惑
最近有资料提及,在Display Compatibility Test Kit(微软显卡WHQL测试使用的主要软件之一)最新版的测试中,nVIDIA和ATi的主流显卡都存在着问题。nVIDIA公司的产品,在Pixel Shader3.0甚至在Pixel Shader 1.2、1.3的测试中都出现了失败,ATi公司的产品在Vertex Shader3.0的测试中也没有顺利通过。
显然,ATi测试失败的原因和前面提到的R2VB有关系,而nVIDIA公司的失败到底和什么有关,目前还没有确切的资料,不过有传说只是和驱动有关。对于第三方网站的这项测试结果,nVIDIA公司也作出了一些解释,大致的意思是,用DCT跑的测试是一个严格的对比测试,渲染画面低于或者高于对比画面,都可能显示测试失败,所以测试失败并不意味着不能支持相应的技术。
结语
不管DCT测试的结果如何,最终可以肯定的是NV4x和R520都完全被微软认证通过DirectX9.0C。但从这些事件背后,可以发现即使有了标准和认证标准的公司,这里边擦边球还是不少的。
用R2VB取代VTF就是这么一个擦边球的好例子,纷争的根本只在于厂家对标准的理解,以及对自己利益最大化实现的手段不同。而纷争的结局,肯定是大家都能得到面子上的荣誉(认证通过)。作为用户,最重要的还是要透过纷争看到一些本质的东西,比如厂家在设计取舍上表现出的价值取向,以及其产品的实际性能高低。