冒险解谜游戏中文网 ChinaAVG

标题: 【汉化资料】Direct3D程序调试利器 PIX Win [打印本页]

作者: shane007    时间: 2009-6-21 23:24
标题: 【汉化资料】Direct3D程序调试利器 PIX Win
原文
7 t& ~% J* C& N3 B- a* K8 A: fhttp://h31home.com/rss/blogto.asp?id=40921
# g6 q# M  Z8 z! |! u
# I+ x- p! t! G2 s1 ^+ [PIX Win是DirectX SDK附带的Direct3D程序调试和分析工具,用于D3D应用程序,如果D3D程序的开发者需要收集和分析应用程序对3DAPI的调用和执行信息,此工具是一个很好的选择。例如,用户需要知道某个渲染过程中,后台渲染目标、深度缓冲区、模板缓冲区是否正确地渲染出来了,或者想知道在某帧一个D3D对象是否被正确释放了,可以用这个工具进行调试。当然,此工具不能用于OpenGL程序。本人在一款产品的优化中,使用了此工具,搜索后除了有MSDN文档外,未发现此工具的任何介绍,那这里就以使用者的角度进行简要介绍,希望与使用过和将要使用此工具的朋友交流D3D程序优化的相关经验。
/ w9 R8 i2 [( k" [* w# _' j; Z' b4 s) @6 I$ B; q
1.工具界面
* o5 Z% s8 ?: n( _5 Q) c" m5 r参考文档:MSDN PIX documentation 2 u. Q2 {- f/ F6 n$ R
[attach]13420[/attach]
4 g: @  C" Y9 A0 ?1 e6 `8 M) R  e 6 K9 Z, m) l5 j- h3 b

4 m$ R  o; Y3 N! _5 a' N 图1 在PIX中创建一个实验
$ Q3 c9 I; Z. O- m* |, U  q
' T7 k) `" Q, U# F  e4 }* P0 b1 S用PIX创建一个实验,运行后,截取D3D应用程序的调用,可以生成一个调用记录文件。经常的做法是创建一个实验,指定一个快捷键,并设置在按键触发时捕获所API调用,再设置自动保存到实验运行文件(*.PIXrun),而实验设置本身又可以存为一个很小的实验文件(*.PIXexp)。程序退出时或打开实验记录时界面切换到下图的样子。下图是从wikipedia借来的主界面图,图中展示的是程序录制的结果。" p0 X9 j7 K. o5 T
[attach]13421[/attach]
" U% D8 \( }, T, p7 I% B [attach]13422[/attach]  
2 I0 M7 p  n) [' x2 m
! E$ i1 K  J2 U( \, E0 g( ~) y4 M/ L: O
图2 PIX调试分析界面. d7 J9 ]" `5 o! F, [# U, O
' T9 t4 p: ~" _/ P
图2中的4个视图分别显示了时间轴,对象列表,事件列表,渲染目标和对象查看视图。 在事件中,可以切换录制的帧,展开树型列表,可以看到在这一帧中对D3D/D3DX函数的调用情况,参数以及返回值。其中蓝色的是地址,代表一个对象指针,点击它可以在右边显示。当选择一个帧时,对象视图中的有些对象变成Alive,这代表这个对象在这一帧中是可用的,双击即可查看。图中选中的是某帧中第2727次函数调用的情况,这是一个SetTexture调用。
: `8 Q2 t2 L* E6 |& u" ?0 Q) {4 F8 g- E: N) g
渲染和对象查看视图中列出了对象的属性,在上部可以设置过滤和排序,每列显示了他被释放的时间(第几帧),引用计数器、分辨率等信息。需要注意的是,只有在事件列表中选中了某一帧,并且打开了右下角的对象查看器中的Render窗口,才能使对象变成可用,当对象可用时,双击对象列表中的对象或直接双击事件列表中指针,就可以在一个新窗口中显示了。我用的版本可能存在一个bug,显示第2个对象就会崩溃,所以可能需要一个对象查看标签后才能打开下一个对象。图2中右下角视图显示的是一个表面。
' O; ]: d/ A" U7 h( ^4 o, h! i) w: R+ J( W5 C
2.实验内容简介
7 i9 C$ _3 b7 @. i% M要使用PIX对应用程序进行测试,需要建立一个个实验,此实验需要设置应用程序的路径和运行参数,另外选择你要测试的项目,所有测试参数选择好之后,就可以开始测试了,这些测试参数可以保存为一个脚本文件,以后可以反复测试。
9 ^# n( c0 N/ n0 B; t$ s: @
" r, u6 j# F+ `6 }/ l此工具的位置:
4 k) L, Y( W" D+ v" a9 u$ ^) w8 V# g8 a: x# f
Microsoft DirectX SDK (June 2006)\Utilities\Bin\x86\PIXWin.exe! [. I/ N8 o: w9 P; C# E
- q+ B+ B9 ?+ ]/ K6 L/ {
此工具的完整文档位于帮助文档的如下位置:
3 D) m" R9 X) ~9 p" [' Q. ~! G  W  F& @& S
DirectX Software Development Kit\DirectXTools\PIX1 g, H; Z. H! r# L, \
# o. n; B9 Z8 |. \3 t, S7 D4 l
如果打开帮助文档,使用搜索,输入PIX也能很快定位到这部分文档,从开始菜单中可以直接启动该工具。9 V- ^. G- A) ^# j1 R8 F

4 S. k' Q0 ]$ q. E0 @! J本文旨在以用户角度而不是MS角度介绍此工具的使用。$ z6 Z& T/ z" D/ a2 D
' ]& ^9 H( u( t0 l5 o0 w
能测试或记录的项目包括:& h1 J: i6 W) {7 j2 l7 L$ C% P; N; I+ U
( p; \  M. I! Y9 S3 A7 W' N
(1).每Frame对D3D/D3DX函数的调用,以及参数,可以多次记录单个Frame,也可以记录一段Frame;* B$ g' X8 _% a6 W! _
+ P: w* r$ k3 X* C* H
(2).截取屏幕;
- S1 P4 |' W4 k
$ |  C, w. m: p(3).每Frame的计数器,以曲线方式显示在屏幕上,包括提交DP,DIP,DUP,DUIP,SetRenderState,SetTexture等请求的数量,的三角形数量,这里,统计的项目可以灵活设置;
  @1 q% ~; f" G# n) M
2 p" ~6 f* e6 Y! [(4).设备修改;/ f+ l; E/ t! T2 U1 H
$ x7 M6 }* P1 U( R
(5).拦截Draw调用;* P' `' D! t2 {# C5 B7 b  S( [: N  x

( i- s. {; k& V* k(6).保存设备状态到文件;
1 X* q/ o1 k, Q  ]( q" ], b/ t9 K% U; |/ M1 E8 M8 E7 ]4 b# b
(7).记录API调用时的数据,包括纹理,顶点和索引的数据,在重绘时,可以查看提交的每个纹理以及纹理的完整数据;; Y' G9 V# w* H0 ]

( u+ d- C5 C+ g# `(8).保存实验记录,将所有试验中处理的数据保存到一个文件中,当然,如果完整记录所有Frame,文件可能比较大,一般只记录关键的几个点。实验记录可以脱离原EXE和资源使用,如果日后需要分析,也只需要这一个文件。% }- x9 g, k9 J6 n4 N
4 a* u* n6 |- z# K
实验数据保存后,可以反复查看,其中包括保存的各个帧。
: D5 ?7 v5 p8 |. f% m0 T1 K: ~8 V3 m$ I5 c! H0 J6 y, {" ]) J( Y
有了这些测试项目,你可以检查你的应用程序是否提交了正确的状态,释放了不再使用的纹理,如果在某帧一个纹理在某帧还可用,而工具中的渲染窗口还在激活时,此纹理将显示可用,您可以在双击事件列表里的指针或对象表中的条目查看各种数据(顶点,索引,以反汇编形式显示的Shader程序等)表面(纹理,表面等)。




欢迎光临 冒险解谜游戏中文网 ChinaAVG (https://chinaavg.com/) Powered by Discuz! X3.2