● 有关精度的唇枪舌剑
如果说Pixel Shader1.4之争仅仅是支持度的问题的话,接下来所发生的这场争执就不再那么简单了。它不仅将NVIDIA与微软的分歧摆上了台面,更影响了NVIDIA整整一代产品的表现,它就是初代DirectX9.0的浮点精度。
Pixel Shader2.0实现的效果
2002年12月,微软发布了全新一代图形API——DirectX 9,如果说DirectX 8.1的Pixel Shader1.4改动来的太小,支持度和意义都不是很大的话,DirectX 9的Pixel Shader2.0就可谓是脱胎换骨了。全新的Pixel Shader2.0所引入的更大的指令数也让Pixel Shader2.0获得了更好的效率,同时FP24浮点格式的RGB数据处理让程序员第一次有了能够完整正确的表达颜色的可能。有了DirectX 9,人们终于有可能在计算机上创造“虚拟的现实”了。
Pixel Shader2.0的浮点数据精度存在问题
但就是这么一个重要的API,却在发布的同时就引发了一场巨大的争吵和骚动。人们纷纷对微软使用的浮点精度表示了困惑,而NVIDIA则第一时间对这种精度提出了质疑,认为这个浮点精度是不会被市场采纳和接受的,得不到认可的,更将矛头直指微软针对自己,恶意推出一款违背常规及现实需要的图形API,我们甚至可以从当时NVIDIA的态度中感受到明显的激动。
也难怪NVIDIA如此激动,因为美国电气和电子工程师协会在IEEE 754中规定的二进制浮点算法规则里,压根就不存在FP24这么个格式……
IEEE754关于浮点数据精度定义的文件
根据硬件的预研周期,一款图形构架是不可能等到图形API出现之后才开始研发工作的。因此对于厂商来说,如果想定义一款构架所需要遵循的基本规则,要么厂商要自己对即将到来的API内容进行预判,要么通过与规则制定者的紧密合作来获取规则的第一手资料。虽然没有人只用一条腿走路,但在第一代DirectX 9硬件的研发过程中,NVIDIA很明显更倚重于前者,而ATI则明智的选择了后者。因此后续出现的NV30所支持的浮点精度均为IEEE754规定的FP16/32,而R300则紧贴微软的要求,刚好支持FP24这个并不存在于国际通行标准中的格式。
相信DirectX 9发布时的NVIDIA,心中一定是充满了疑惑、愤怒和不安的,因为他十分清楚接下来将要发生的事情。而像素处理单元战争故事中第一个高潮,也即将到来了。
三秦IT网的官方微信:更多资讯请关注:三秦IT网官方微博