冒险解谜游戏中文网 ChinaAVG

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

作者: shane007    时间: 2009-6-21 23:24
标题: 【汉化资料】Direct3D程序调试利器 PIX Win
原文& ?0 {4 ^  `; u  u
http://h31home.com/rss/blogto.asp?id=40921 7 j6 o: Q- |3 t' N, h
" P4 J0 I( L' n9 K4 z( n7 |( n* U
PIX Win是DirectX SDK附带的Direct3D程序调试和分析工具,用于D3D应用程序,如果D3D程序的开发者需要收集和分析应用程序对3DAPI的调用和执行信息,此工具是一个很好的选择。例如,用户需要知道某个渲染过程中,后台渲染目标、深度缓冲区、模板缓冲区是否正确地渲染出来了,或者想知道在某帧一个D3D对象是否被正确释放了,可以用这个工具进行调试。当然,此工具不能用于OpenGL程序。本人在一款产品的优化中,使用了此工具,搜索后除了有MSDN文档外,未发现此工具的任何介绍,那这里就以使用者的角度进行简要介绍,希望与使用过和将要使用此工具的朋友交流D3D程序优化的相关经验。
5 y/ ^# M/ X* w- ^. v  r: T7 I3 g
( }: Y" Y+ p# ?1 e2 p( F* u1.工具界面5 K4 V/ I* a8 ~, h; u
参考文档:MSDN PIX documentation
) N$ A. l, E' {% B2 q# [ [attach]13420[/attach]
3 l6 O2 N8 |& L' L1 S+ l+ S" E2 Z: Y
3 ^: X! x: ]" u8 U3 l/ U3 Q4 C  d! i1 e, x+ a
图1 在PIX中创建一个实验
4 }3 W2 o5 e* H* ?  Y. q# y: X
( x0 M$ y. o' J0 ?5 `9 f用PIX创建一个实验,运行后,截取D3D应用程序的调用,可以生成一个调用记录文件。经常的做法是创建一个实验,指定一个快捷键,并设置在按键触发时捕获所API调用,再设置自动保存到实验运行文件(*.PIXrun),而实验设置本身又可以存为一个很小的实验文件(*.PIXexp)。程序退出时或打开实验记录时界面切换到下图的样子。下图是从wikipedia借来的主界面图,图中展示的是程序录制的结果。
7 p. j0 _+ w3 Z) H3 l [attach]13421[/attach]8 ~8 L& ~' Z# [/ a3 [2 b1 V
[attach]13422[/attach]  ! c7 x% E" T0 o6 _$ j
" p# V. Z! n1 L+ t- z% F
8 e8 E$ J. ~. v1 H, [
图2 PIX调试分析界面
1 ?/ H# O. L% V
. M% x, S* b- g( q& y& e. Q- A图2中的4个视图分别显示了时间轴,对象列表,事件列表,渲染目标和对象查看视图。 在事件中,可以切换录制的帧,展开树型列表,可以看到在这一帧中对D3D/D3DX函数的调用情况,参数以及返回值。其中蓝色的是地址,代表一个对象指针,点击它可以在右边显示。当选择一个帧时,对象视图中的有些对象变成Alive,这代表这个对象在这一帧中是可用的,双击即可查看。图中选中的是某帧中第2727次函数调用的情况,这是一个SetTexture调用。
# e( s1 Y( k3 H  r/ m2 C( H% z, ^( m, k+ P
渲染和对象查看视图中列出了对象的属性,在上部可以设置过滤和排序,每列显示了他被释放的时间(第几帧),引用计数器、分辨率等信息。需要注意的是,只有在事件列表中选中了某一帧,并且打开了右下角的对象查看器中的Render窗口,才能使对象变成可用,当对象可用时,双击对象列表中的对象或直接双击事件列表中指针,就可以在一个新窗口中显示了。我用的版本可能存在一个bug,显示第2个对象就会崩溃,所以可能需要一个对象查看标签后才能打开下一个对象。图2中右下角视图显示的是一个表面。
) I4 \/ L" a: k6 u
* X) S, L- G9 i5 }7 N6 |: b6 c" t2.实验内容简介
& H" L+ u4 f2 w0 ~$ h# e* u+ u要使用PIX对应用程序进行测试,需要建立一个个实验,此实验需要设置应用程序的路径和运行参数,另外选择你要测试的项目,所有测试参数选择好之后,就可以开始测试了,这些测试参数可以保存为一个脚本文件,以后可以反复测试。
- Z' s& d; n& a9 K( g. P7 c8 ^2 O; Z
此工具的位置:& O( |3 Q: |+ g8 O5 e/ [, O8 w' l. ?

/ `& ]2 ?9 R0 q/ v+ M. t5 XMicrosoft DirectX SDK (June 2006)\Utilities\Bin\x86\PIXWin.exe
' ~  z( r6 I3 R/ o1 f6 A
$ K5 ^  p0 Y! |* u! X# X此工具的完整文档位于帮助文档的如下位置:+ Z8 W; U) P2 g7 u8 i

# y" _8 o2 C) ]3 w2 a6 U( c( i( }DirectX Software Development Kit\DirectXTools\PIX+ E! n' l7 R: Z* u

6 I, S! s" ?( t" e如果打开帮助文档,使用搜索,输入PIX也能很快定位到这部分文档,从开始菜单中可以直接启动该工具。
* Q, Y- U1 J1 D: q" G9 x
5 F( t/ o. i- D* r$ m本文旨在以用户角度而不是MS角度介绍此工具的使用。7 u  A! ?/ B6 H
' X9 K" L# ^/ @2 a& B4 V8 T! P
能测试或记录的项目包括:
2 c3 L4 O1 p+ k, n- l4 r# p, G) C# F9 t$ B0 t
(1).每Frame对D3D/D3DX函数的调用,以及参数,可以多次记录单个Frame,也可以记录一段Frame;
4 j6 U' C7 a- Y* T/ @8 [
0 |  ^5 A* @9 h' {; l8 f% N! m(2).截取屏幕;
# W3 D+ O# ~( }% L3 ^) Z
# \, K# B4 g$ a  W(3).每Frame的计数器,以曲线方式显示在屏幕上,包括提交DP,DIP,DUP,DUIP,SetRenderState,SetTexture等请求的数量,的三角形数量,这里,统计的项目可以灵活设置;
1 k3 N) v3 D6 Q1 @( u4 p4 D" M; l- P$ N2 C; e
(4).设备修改;
! f4 x  B7 `, `% C( ~$ @; u  B4 u9 ^( B/ s( C+ }
(5).拦截Draw调用;
4 u1 n4 U) {3 Z! \- Z" N
, s5 @7 L5 k, w) e0 W' k& ^) g8 Q; p(6).保存设备状态到文件;+ l9 t* x# v/ E; X
6 p* v  Y  `* p8 A( l
(7).记录API调用时的数据,包括纹理,顶点和索引的数据,在重绘时,可以查看提交的每个纹理以及纹理的完整数据;
( e3 y% s  v, c( w& s) t- i- T3 W6 ~3 V8 L2 \( f( ]. b
(8).保存实验记录,将所有试验中处理的数据保存到一个文件中,当然,如果完整记录所有Frame,文件可能比较大,一般只记录关键的几个点。实验记录可以脱离原EXE和资源使用,如果日后需要分析,也只需要这一个文件。
# c% P# t; ]0 s
8 [  s4 @! p8 M4 y实验数据保存后,可以反复查看,其中包括保存的各个帧。
5 o2 m# T' ?5 s' @  ~
" C+ n1 w* ^  z. \( A有了这些测试项目,你可以检查你的应用程序是否提交了正确的状态,释放了不再使用的纹理,如果在某帧一个纹理在某帧还可用,而工具中的渲染窗口还在激活时,此纹理将显示可用,您可以在双击事件列表里的指针或对象表中的条目查看各种数据(顶点,索引,以反汇编形式显示的Shader程序等)表面(纹理,表面等)。




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