这个例子用来学习采用PIX调试与检测程序问题,放在dxsample难度比较简单的位置感觉不大恰当
例子中各种选项可以制造各种可能的问题,来说明碰到这种问题如何进行调试
英文文档的Sample Features里面描述了各种可能导致功能问题和性能问题的情况
各种具体调试情况如下:
制造黑屏:
Fog:None
Caustic Texture:Black
Black Clear:true
采用例子中说明的pix使用方法“查出”第二个texture sampler为黑色纹理
采用的方法包括:调试像素查看shader、查看draw call的device状态里面的sampler states
pix调试hlsl需要修改编译参数,切换到ref方式运行,改完以后太慢了!
制造环境:
勾选Ref count exit error
采用文档中所述步骤可以捕捉到未释放vertex创建点,但是需要在代码里面有D3DPERF_BeginEvent、D3DPERF_EndEvent对
制造环境:
打开Z-Fighting
通过文档中步骤可知,棋盘mesh包含2个submesh,导致z-fighting
这一部分讲的是:如果某些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运行情况分析崩溃原因
观察各种计数