您的位置:首页 > 其它

关于ATI显卡的一个奇怪问题?

2006-01-15 12:13 429 查看
近日编写shader的时候发现一个奇怪的问题,在我的6200卡上以下shader代码可以正确的计算出结果,而在ATI 9600的卡上就是错误的,查了很多资料还是百思不得其解,那就当做一点点经验把它记录下来,以后再有朋友遇到类似的问题就不用像我这样逐行代码排除找错误了:)

在我的shader里,有这样两行代码,用于算像素normal:

float3 vNormal=normalize(2*(vA+vB)-2);
...... 省略若干不相关代码
float NdotL=max(dot(vNormal,eyeDir),0);

这里vA,vB都是float3,来自于bump贴图取样和vs输入,在我的6200卡上可以正确计算出结果,也就是说NdotL的取值是[0,1]之间,而在同事的ATI 9600卡上, NdotL的结果是恒为0,经过逐行排除测试,最终发现是

float3 vNormal=normalize(2*(vA+vB)-2);

导致错误,vNormal的计算结果不在预期,将代码调整为:

float3 vNormal1=2*vA-1;
float3 vNormal2=2*vB-1;
float3 vNormal=vNormal1+vNormal2;
vNormal=normalize(vNormal);

问题得以解决,开始以为是同事的机器的DX版本太低,导致fxc编译出来的shader代码有错误,可是我和同事互相掉换fxo后,同事问题依旧,而我同样是正常,在令一同事的ATI 9800卡也是正常的,至此得出结论ATI 9600卡硬件设计可能存在问题,因为驱动已经更新至最新;抑或是DX的fxc编译的shader代码移植性不高,因为同样的代码使用nVidia CG编写在9600上是没有问题的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: