關於 顯示卡的乙個奇怪問題?

2021-04-02 12:41:39 字數 847 閱讀 4590

近日編寫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上是沒有問題的。

關於小公尺手機的乙個奇怪的問題

原因 或許是小公尺手機自己的bug 至少我在小公尺手機上發現了好幾個大坑,不信的勿噴 測試妹子突然告訴我,input輸入後,頁面就自動跳轉了 我的內心是崩潰的 心想,這是什麼奇葩問題,然後轉過頭看了下,嗯 小公尺手機 聽了測試妹子的描述,又用ios和hornor測試了下,用chrome也測試了下,並...

乙個關於Unicode字元編碼的奇怪問題

有乙個學員問了乙個關於unicode字元編碼的奇怪問題。問題如下 string strchina 中國 1 直接把每個字元中的內容對應著的整數列印出來,顯示的結果就是這個字元的unicode碼,則下面的 for int i 0 i 列印出的結果是 4e2d 56fd 2 下面的 byte buf s...

乙個關於Unicode字元編碼的奇怪問題

有乙個學員問了乙個關於unicode字元編碼的奇怪問題。問題如下 string strchina 中國 1 直接把每個字元中的內容對應著的整數列印出來,顯示的結果就是這個字元的unicode碼,則下面的 for int i 0 i 列印出的結果是 4e2d 56fd 2 下面的 byte buf s...