51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3427|回复: 0
打印 上一主题 下一主题

如何调试Shader

[复制链接]
  • TA的每日心情
    慵懒
    2015-1-8 08:46
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2008-1-10 17:58:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    今天说说如何调试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数学加密等算法。
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-16 06:22 , Processed in 0.067930 second(s), 28 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表