如何调试Shader
发布:siney | 发布时间: 2007 11 13今天说说如何调试shader? 看起来不是个问题,但很多开始接触shader的同学,总会问这样的问题,因为shader不像一般的cpu指令,它是跑在gpu下的指令,而gpu没有提供了调试功能(至少据我所知),所以看似调试shader是不可能的任务。
幸运的是,在d39中提供了调试shader的方法,还附带visual studio的插件,以方便调试。具体请参考d3d9的帮助文档,搜索Shader Debugger章节,里面有详细的描述,简单的说,就是d3d9模拟了gpu的行为,让所有gpu的指令在cpu模拟下运行,然后就可以断点调试了,不过不得不说的是,调试shader非常慢,特别是ps,因为cpu模拟ps的行为很耗时,而vs相对要快点,如果vs1.1的调试基本可以和本地代码相当,因为vs1.1的行为用cpu模拟也很快,这也是为什么d39内建软件模拟vs1.1,而且这个模拟的速度是可以接受的,所以现在我写很多vs代码,如果用到vs1.1特性,都当作硬件默认支持,就算不支持,软件模拟也是可以接受的。
虽然讨论了如何调试shader,但真正的断点(我想这也是想调试shader的目的)跟踪shader有必要吗?我在我们的游戏里写了很多的shader,但真正断点跟踪调试的shader一次也没有,首先是因为速度慢,其次就是因为断点跟踪也没有多大帮助,因为vs/ps一般都很短小,我一般采用插入特征代码的方式来附注调试,比如怀疑那个矩阵、坐标有问题,就写死那些变量,看看渲染的结果有没有变化来排除为题的原因,对于ps,也是如此,写死某些颜色的计算、把法线映射成颜色查看是否正确,因为图形渲染更直观,比单纯的看寄存器的数据有帮助。
当然随着gpu越来越强大,在gpu中加入调试的功能应该还是有必要的,等gpu发展到一定成都,gpu就不单可以做图像计算了,甚至其他方面的逻辑、数学计算,比如目前流行的gpu物理模拟,gpu数学加密等算法。
- 相关文章:
- 1.caimizhu
- http://www.swissworld.org
内容很不错,留言本也很好,楼主还要努力哦 :)
http://www.swissworld.org- 2007-11-23 09:45:22 回复该留言
- 2.orlando
- 请问
我用的VS2005 DXSDK AUG 2008
为什么在VS里面没有调试Direct3D的选项啊?
我已经在DX控制面板里设置了DEBUG选项 - 2008-11-27 12:26:07 回复该留言
发表评论
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。






