上次談過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版,也難保不會在接下來的幾個月翻新。再怎麼說,標準之所以稱為標準,便是因為可以遵行,並確實達成所需效果吧!相信一個成熟穩定的技術,才是最能被市場所接受的。