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