上次谈过x86 32位带来的负担,能够执行32位的软件成为新一代64位CPU挥之不去的梦魇。在图形处理器GPU上,却有着不一样的发展方向。

很多人知道x86 CPU的共通指令集标准,相对之下,没有太多的人研究过GPU的指令集标准。甚至还会有人怀疑,GPU若有共通的指令标准,那也就不需要针对不同的GPU,设计不同的驱动程序了。这样的理想,其实已达成了一半,绘图芯片仍需要不同的驱动程序叫他们做事,但却有共通的指令集让软件直接使用了。也许聪明的您早就想到了,就是Vertex Shader及Pixel Shader。

这两种Shader提供了绘图系统或游戏厂商一个标准,按这样的标准就可以设计出一个绘图系统的「机器语言」,在不同的绘图卡上执行,而不需要考虑兼容的问题,也能更贴近硬件层面,彻底的利用GPU的每一分效能。目前的Shader语言是经由类似汇编语言的方式设计,当然,也可以用「高级语言」来设计。例如Nvidia提供的CG(C For Graphics) ,就是一套用来写Shader程序的高级语言。

而有趣的是这个已经是标准的标准,仍有很多争议的空间,完全不像CPU的指令集一样,规规矩矩来来去去就是那一套,反而在几年间,飞快的由1.0版成长到了3.0版。给了业界一个可遵从的标准同时,也造成了绘图卡研发厂商及游戏设计者不少困扰。

从硬件方向来看,这两种Shader的主要制订者,就是MS及相关显示芯片制造商,而主要配合的目标,当然就是MS的DirectX了。以现在最新的Direct X 9a来说,其中包含的Pixel Shader及Vertex Shader已经是3.0版,目前没有绘图卡可以支持。其实,别说是3.0版;DirectX 9 中Pixel/Vertex Shader 2.0版的要求,已经鲜有绘图卡完整支持。Nvidia及ATi等代表性厂商当然可以轻易的推出兼容产品,有着惊人的晶体管数量及价格。对其他的绘图卡制造商来说,却成了一个苦苦在后追赶的目标。一个原本应该放诸四海皆共通的标准,却很难不给人一种「绑标」的感觉,拉大绘图芯片大厂和其他小厂间的差距。

再从软件方面来看,一再的快速更新标准也不见得是好事,毕竟一变再变的标准,也很难称得上标准。幸好更新软件远较硬件容易的多,问题也较少。像PC游戏上较常用的绘图接口DirectX,就能往下兼容旧的版本,确保厂商过去的设计投资,能在新的硬件上执行。不过,由于躁进及大厂间的明争暗斗,Pixel Shader及Vertex Shader在演进上并不算十分顺利,规划方向及架构,都因为一些争执,而一再修正。

计算机绘图标准的另一开山元老OpenGL,也在朝Shader的架构前进,只是前进的速度慢得多。最早是由ATi和nVidia提供扩充函式支持,进一步收入在OpenGL 1.3版,成为标准的扩充函式。3D Labs公司正提倡OpenGL 2.0规格,想让OpenGL完全进入Shader的时代。这个OpenGL的参与者,大部份也都参与了DirectX的规格制订,因此OpenGL的Direct X在Shader方面,会有极高的兼容性。

规格的快速变化,虽然表示发展迅速,却也代表了先前版本的制订草率。这对所有用户和研发厂商来说,都不是种负责任的行为。连最新的3.0版,也难保不会在接下来的几个月翻新。再怎么说,标准之所以称为标准,便是因为可以遵行,并确实达成所需效果吧!相信一个成熟稳定的技术,才是最能被市场所接受的。