|
|
一个简单的 pixel shader:
tex2d r0, s0, t0
mov r1, c1
mad r0, r0, r1, c0
mov oC0, r0
对于传统双 4D ALU 的 pixel shader 单元可以两周期完成 tex2d 一周期,mad 一周期
而在 G80 看来要 5 周期完成,G80 的驱动会把 shader 翻译成这样
tex2d r0, s0, t0
mad r0.x, r0.x, r1.x, c0.x
mad r0.y, r0.y, r1.y, c0.y
mad r0.z, r0.z, r1.z, c0.z
mad r0.w, r0.w, r1.w, c0.w
其实最后一条指令在绝大多数情况下可以省略,可是如果程序不指定,driver 不能强制省略。所以如果想充分发挥 1D 的优势,原始程序必须这样写
tex2d r0, s0, t0
mov r1, c1
mad r0.xyz, r0, r1, c0
mov oC0, r0
所以 NV 只能继续从 driver 作特定 shader 的侦测与替换来完成优化,这到底是否作弊,就没有一个决切的说法了... |
|