Shader代码自动优化产生的问题

来源:互联网 发布:美国国民警卫队知乎 编辑:程序博客网 时间:2024/05/16 11:42

        今天修改引擎代码和shader后,FPS一下降到1-2,以为是引擎代码中设置纹理的一个地方的问题,导致纹理频繁被切换,但之后排除了这个问题。发现是debug输出窗口一直在输出信息。一看是VS中输出的几个纹理坐标值在PS中没有使用,我们的引擎在渲染时进行了检查,发现VS输出和PS输入声明不匹配,而每帧输出debug信息,从而导致帧率突然降低。

        但PS的声明和VS输出是绝对一致的,问题出在shader代码编译时的自动优化。为了调试看修改的效果,我在PS中将颜色值设成1了,后面光照计算结果也注释掉了(为了看Lightmap效果)。正是注释掉的问题,shader在编译时编译器发现颜色值在去了纹理颜色后又被赋值为一个常量,后面光照结果也没有用,便进行了自动优化,没有执行这些无用的操作(虽然代码存在),当然几个纹理坐标也就没有用到,PS输入结构估计也被优化了,去掉了这几个纹理坐标声明。

        现在发现,有的问题,如果不是有经验,碰到了真的会让人调试挂掉的。就像这类问题,还有上次的vs2008调试信息不对的问题,如果不是总监有经验,我想我很难这么快解决。

       另外,需要多了解shader model的结构,比如各种寄存器数量,支持新指令等。PS_3_0支持的输入寄存器是10个,即输入的纹理坐标数据不能超过10。

原创粉丝点击