现在的位置: 首页 > 综合 > 正文

DirectX Sample-PIXGameDebugging:采用PIX调试程序

2018年05月03日 ⁄ 综合 ⁄ 共 934字 ⁄ 字号 评论关闭

这个例子用来学习采用PIX调试与检测程序问题,放在dxsample难度比较简单的位置感觉不大恰当

例子中各种选项可以制造各种可能的问题,来说明碰到这种问题如何进行调试

英文文档的Sample Features里面描述了各种可能导致功能问题和性能问题的情况

各种具体调试情况如下:

诊断黑屏

制造黑屏:

Fog:None

Caustic Texture:Black

Black Clear:true

采用例子中说明的pix使用方法“查出”第二个texture sampler为黑色纹理

采用的方法包括:调试像素查看shader、查看draw call的device状态里面的sampler states

pix调试hlsl需要修改编译参数,切换到ref方式运行,改完以后太慢了!

程序退出D3D引用计数调试

制造环境:

勾选Ref count exit error

采用文档中所述步骤可以捕捉到未释放vertex创建点,但是需要在代码里面有D3DPERF_BeginEvent、D3DPERF_EndEvent对

纹理闪烁

制造环境:

打开Z-Fighting

通过文档中步骤可知,棋盘mesh包含2个submesh,导致z-fighting

捕捉不确定的Bug

这一部分讲的是:如果某些bug不是每一帧都出现,比如z-fighting,可以保存一段replay到文件,然后分析这段replay运行情况,找到出问题的帧,然后profile这段replay完毕,再类似纹理闪烁里面一样查找问题

物体不显示

制造环境:

Draw:Bad XForm

对于文档中描述“车” draw call的两幅图,通过对比PreVS和PostVS中Position,以及Fog位置,再查看代码中的worldtransform,得出问题原因:“车”被放大并改变了位置,真个场景现在在“车”里面

场景不显示

制造环境:

Scissors Bad

这个例子其实还是通过Debug Pixel,通过下面的红色文字得出结论是scissor test fail,然后通过查看device状态找出问题

另外一个例子是勾选Draw Light Shafts 1st,通过Debug Pixel会看出后面draw call的时候像素深度测试失败

游戏崩溃

根据replay运行情况分析崩溃原因

计数捕捉

观察各种计数

抱歉!评论已关闭.