load d3dcompiler_46.dll failed

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

posted on 2014-12-04 14:44  minggoddess  阅读(344)  评论(0编辑  收藏  举报