设为首页收藏本站官方微博

【汉化资料】Direct3D程序调试利器 PIX Win

[复制链接]
查看: 1588|回复: 0
打印 上一主题 下一主题

【汉化资料】Direct3D程序调试利器 PIX Win

跳转到指定楼层
楼主
发表于 2009-6-21 23:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

【汉化资料】Direct3D程序调试利器 PIX Win

原文
+ A  Z5 r9 G" d$ D) Bhttp://h31home.com/rss/blogto.asp?id=40921 # x6 _7 \, o+ n& y

& r1 `4 p- K' T7 [+ [6 q! OPIX Win是DirectX SDK附带的Direct3D程序调试和分析工具,用于D3D应用程序,如果D3D程序的开发者需要收集和分析应用程序对3DAPI的调用和执行信息,此工具是一个很好的选择。例如,用户需要知道某个渲染过程中,后台渲染目标、深度缓冲区、模板缓冲区是否正确地渲染出来了,或者想知道在某帧一个D3D对象是否被正确释放了,可以用这个工具进行调试。当然,此工具不能用于OpenGL程序。本人在一款产品的优化中,使用了此工具,搜索后除了有MSDN文档外,未发现此工具的任何介绍,那这里就以使用者的角度进行简要介绍,希望与使用过和将要使用此工具的朋友交流D3D程序优化的相关经验。* P0 P0 D3 T( B& y1 Q! L

1 k: n4 `2 n6 o3 r+ f7 C' X" Q1.工具界面& f6 b6 P. U* \) t3 p! S: M
参考文档:MSDN PIX documentation ) F  u3 E! V& A8 N8 u5 `
  8 O( k" x2 N+ A% _1 S
) {! a1 J4 Y; ?. `! V( I6 l
! m  f. E9 Y* o+ v5 g2 a1 j8 h
图1 在PIX中创建一个实验: I( n5 k( g0 [1 L( x& S
; a& O6 w5 Y/ I# ^5 N
用PIX创建一个实验,运行后,截取D3D应用程序的调用,可以生成一个调用记录文件。经常的做法是创建一个实验,指定一个快捷键,并设置在按键触发时捕获所API调用,再设置自动保存到实验运行文件(*.PIXrun),而实验设置本身又可以存为一个很小的实验文件(*.PIXexp)。程序退出时或打开实验记录时界面切换到下图的样子。下图是从wikipedia借来的主界面图,图中展示的是程序录制的结果。& J0 F$ Y8 x. O  a( ^2 Z/ z9 h

7 ^$ D4 ]% |1 [2 r( e) t7 a   7 I7 ?/ C7 ]# J! J
" ?' ~6 R0 P' k2 v0 {* a5 r
9 k6 T2 a, x" E+ K1 ~' s
图2 PIX调试分析界面
) m; d- c1 g" ~, T4 w2 F& |, o: w$ ?. H% C, M+ i
图2中的4个视图分别显示了时间轴,对象列表,事件列表,渲染目标和对象查看视图。 在事件中,可以切换录制的帧,展开树型列表,可以看到在这一帧中对D3D/D3DX函数的调用情况,参数以及返回值。其中蓝色的是地址,代表一个对象指针,点击它可以在右边显示。当选择一个帧时,对象视图中的有些对象变成Alive,这代表这个对象在这一帧中是可用的,双击即可查看。图中选中的是某帧中第2727次函数调用的情况,这是一个SetTexture调用。
* M: L% d3 K9 G' p
4 u# x7 l$ n9 n3 O! ]0 g渲染和对象查看视图中列出了对象的属性,在上部可以设置过滤和排序,每列显示了他被释放的时间(第几帧),引用计数器、分辨率等信息。需要注意的是,只有在事件列表中选中了某一帧,并且打开了右下角的对象查看器中的Render窗口,才能使对象变成可用,当对象可用时,双击对象列表中的对象或直接双击事件列表中指针,就可以在一个新窗口中显示了。我用的版本可能存在一个bug,显示第2个对象就会崩溃,所以可能需要一个对象查看标签后才能打开下一个对象。图2中右下角视图显示的是一个表面。
! {, [; J& c8 z3 c- d) a( H
/ E% S  q) \- l; x5 ]/ G2.实验内容简介  K: p& E* e0 B
要使用PIX对应用程序进行测试,需要建立一个个实验,此实验需要设置应用程序的路径和运行参数,另外选择你要测试的项目,所有测试参数选择好之后,就可以开始测试了,这些测试参数可以保存为一个脚本文件,以后可以反复测试。
' B8 l8 H; l0 r6 \, Y0 ]
# w" \3 `9 G5 X" @" |* G此工具的位置:
- s2 l6 z0 ]8 a+ p$ F& p+ t. [/ I. f1 F) r0 i0 O" C9 O9 a$ u
Microsoft DirectX SDK (June 2006)\Utilities\Bin\x86\PIXWin.exe
# u6 @3 f/ w- L( D/ J/ m) l3 T' J* r. V* b+ }" e7 j
此工具的完整文档位于帮助文档的如下位置:7 ^( U" Z5 F: M  t

/ w, U/ @$ Y# w" i  j9 SDirectX Software Development Kit\DirectXTools\PIX
  L) Y2 Q* i: U* W5 x0 `& f
+ [6 e5 ^, {" |, Z& b3 y& A8 a0 D如果打开帮助文档,使用搜索,输入PIX也能很快定位到这部分文档,从开始菜单中可以直接启动该工具。
$ D3 p) p% o% Z3 n" I+ L" [
% w# A5 u/ p/ `! v2 D8 \% g9 d5 \本文旨在以用户角度而不是MS角度介绍此工具的使用。
: ?1 u8 u/ Q1 x: i0 ^1 o0 \. B
% _5 K. K7 @' t  r# w) w能测试或记录的项目包括:
- x/ t* |: Q: I# y0 R$ R* f
, x8 O) ~( P" t6 t. \; L(1).每Frame对D3D/D3DX函数的调用,以及参数,可以多次记录单个Frame,也可以记录一段Frame;3 q' I- D; k( H5 A6 g
* W& C# B3 O; t9 P7 G# P7 Q5 _
(2).截取屏幕;
: S) Q7 u' t* D9 _5 v: \& W8 x  J4 p% g- S* U. y7 T, C$ V9 A
(3).每Frame的计数器,以曲线方式显示在屏幕上,包括提交DP,DIP,DUP,DUIP,SetRenderState,SetTexture等请求的数量,的三角形数量,这里,统计的项目可以灵活设置;
7 [  B+ t  l3 I4 a7 \$ H- [7 _3 n
. b6 b. b9 X. l7 i8 ^(4).设备修改;
) b4 r9 Z; g. B8 z' Z
; W% l$ h  \2 J, ^& `' C(5).拦截Draw调用;
4 K1 P& S3 ~4 h" a: U3 z5 S( f
! ~) a# e% z8 e8 N6 S6 p7 F(6).保存设备状态到文件;) ~$ }3 Q+ H% y: K3 u
) x4 [8 E2 M. z4 V
(7).记录API调用时的数据,包括纹理,顶点和索引的数据,在重绘时,可以查看提交的每个纹理以及纹理的完整数据;
% ]# Q- X9 _  F- F  t$ o" P9 t  y$ n$ p7 j) _1 g: R; _2 g
(8).保存实验记录,将所有试验中处理的数据保存到一个文件中,当然,如果完整记录所有Frame,文件可能比较大,一般只记录关键的几个点。实验记录可以脱离原EXE和资源使用,如果日后需要分析,也只需要这一个文件。4 n! X/ I9 n4 i+ J( V# \# G% n# Q9 L
! O  ^1 D3 Q& G7 ~% ]# i
实验数据保存后,可以反复查看,其中包括保存的各个帧。. j, m) v3 q* K6 C" z
. f1 ?' }4 ^$ h, \; N6 K$ k
有了这些测试项目,你可以检查你的应用程序是否提交了正确的状态,释放了不再使用的纹理,如果在某帧一个纹理在某帧还可用,而工具中的渲染窗口还在激活时,此纹理将显示可用,您可以在双击事件列表里的指针或对象表中的条目查看各种数据(顶点,索引,以反汇编形式显示的Shader程序等)表面(纹理,表面等)。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

冒险解谜游戏中文网 ChinaAVG

官方微博官方微信号小黑屋 微信玩家群  

(C) ChinaAVG 2004 - 2019 All Right Reserved. Powered by Discuz! X3.2
辽ICP备11008827号 | 桂公网安备 45010702000051号

冒险,与你同在。 冒险解谜游戏中文网ChinaAVG诞生于2004年9月9日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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