引用:
Originally posted by 宗毛
dynamic branching的實例可以舉一下嗎?
|
Static Branching:以程式執行前就定出的的條件來選擇程式接下來的分支。
Dynamic Branching:以程式執行到一半時得到的結果,決定程式後半部的分支。
嗯,Dynamic Branching應該是Vertex Shader 3.0的事情喔。
NVIDIA強調除了Vertex Texture Lookup,現在NV40的VS幾乎什麼事情都是免費的。
就算是Dynamic Branching 最大只有起始多2 cycle的負擔,即使是因為分支而讀取不同的Vertex Stream。
而我自己也是覺得VS大概很難變成瓶頸....
NV40有6顆,R420有6~8顆,實在是很夠用。
說起來VS除了NV31/34之外,幾乎沒成為瓶頸過。
====
PS的話,好像就不是這麼一回事....
NV40是PS3.0,PS3.0實質上给的功能有:
1. 可以正常使用FP16/32
NV3x實質上沒辦法用FP16/32,Driver沒開
甚至連FP Texture都被關起來了,連我都想喊NVIDIA騙人。
2. 條件分支,在PS3.0還是Static Branching
條件分支寫在Shader內部的主要目的是為了節省pass數。
如果把2~3個Shader寫成一個的話,
透過對切換時間和pass數的節省,
應該就可以一定程度地提高效率。
3. 大量的數學指令和無限長度Shader
不過無限長度Shader不會在RT3D裡面看到,就當沒看到吧。
上面幾個是PS3.0的功能,
不過其實並不構成NV40"現在"拿來比較時的優勢,
所以可以先不算進來,只是有得選以後總是比較好。
=====
實質上,我覺得現在NV40現在有兩個問題:
1. 現在有些遊戲好像還把NV40當NV35跑。
NV35因為PS2.0跑不快,遊戲廠商常常會把NV35當成PS1.1的卡來用。
而有些Shader用PS1.1來寫,有些東西會變成跑不止1個pass。
當然對NV35而言這樣(用PS1.1)還是會比用PS2.0來得快;不過對NV40就不一定了。
從ShaderMark的測試來看,單管線對比下NV40有不少case已經要來得比R300還快,
所以如果每個遊戲都很確實地在NV40上套用上PS2.0的話,NV40的成績應該還有加快的空間。
2. 現在的Driver根本不支援Shader 3.0
B3D的test想拿ixbt-labs的工具來測VS3/PS3測不起來。
如果6/1推出的Driver還沒支援的話,這次保證會再被罵騙人。
VS3/PS3我是覺得如果遊戲沒有改的話,大概就是根本沒有實質幫助。