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