load d3dcompiler_46.dll failed

minggoddess發表於2014-12-04

https://gist.github.com/rygorous/7936047

編shader的時候遇到這個warning不知道是不是什麼隱患。。從今天開始要做新專案了

嘗試從同事那裡要了這dll 拿得x86版本的(我也不知道為什麼 )再編就沒有這個warning了 但是後來又出現了 

我把dll換成x64也還是有這個warining,,,不理它了 有可能是我把shader的profile換成vs4.0的緣故,或者。。。。某種未知原因

 

我換vs4.0是因為 遇到一個error 說

Unable to compile vertex shader - profile not supported

通過跟程式碼發現shaderprofile 如果是vs5.0那麼需要D3D feature level >=11.1

如果是vs4.0那麼需要D3D feature level >=10.1

所以我把所有的shader改成vs4.0 ps4.0這樣這個profile not supproted的error沒有了 

又往下跑了一段距離 報了一個warining 一個error

大概意思是stream0太小和vs到ps的postion有問題 ,這確實是編譯shader的時候遇到的問題

一個叫postion的semantic 不知道該怎麼改之前ps4和d3d兩次編譯的時候 這個semantic是替換成s_position

現在這完全解釋不通,因為s_positon是pssl裡面的,而postion這個semantic也是存在的,這樣以前的d3dcompiler是怎麼編譯過的呢

我看了下msdn的docs

嘗試修改下position

根據文件vs用position vs到ps 用vpos 在d3d10之前

 EXECUTION WARNING #355: DEVICE_DRAW_VERTEX_BUFFER_STRIDE_TOO_SMALL

EXECUTION ERROR #362: DEVICE_DRAW_POSITION_NOT_PRESENT

做了第一步修改之後 就是把position改成vpos 那個warning消失了

error還在,也就是說,這個ps的error和vs那個warining不是因果關係。。。。。

error描述是ps並不為空但是position is not provided by the last shader before the rasterization unit 

這這個意思 還是vs到ps的semantic的問題

這個error終於解決了 就是SV_POSITION 這個semantic的問題

很重要的一點是vs的semantic仍然是POSITION

但是vs到ps需要用SV_POSITION

EXECUTION ERROR #362: DEVICE_DRAW_POSITION_NOT_PRESENT

that is it

 有個關鍵詞 shader porting

相關文章