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

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

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

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

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

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

原文
& o$ \3 G$ x- v) q% \http://h31home.com/rss/blogto.asp?id=40921
+ [0 r2 h( X6 x$ c! U
6 Q' B; R: F7 o" pPIX Win是DirectX SDK附带的Direct3D程序调试和分析工具,用于D3D应用程序,如果D3D程序的开发者需要收集和分析应用程序对3DAPI的调用和执行信息,此工具是一个很好的选择。例如,用户需要知道某个渲染过程中,后台渲染目标、深度缓冲区、模板缓冲区是否正确地渲染出来了,或者想知道在某帧一个D3D对象是否被正确释放了,可以用这个工具进行调试。当然,此工具不能用于OpenGL程序。本人在一款产品的优化中,使用了此工具,搜索后除了有MSDN文档外,未发现此工具的任何介绍,那这里就以使用者的角度进行简要介绍,希望与使用过和将要使用此工具的朋友交流D3D程序优化的相关经验。2 ?% R$ }% _7 A/ t6 W9 |/ R

. b/ t+ x" s3 Q; d1.工具界面4 G: }9 _6 ~# X2 I8 p1 U6 ^
参考文档:MSDN PIX documentation ! R! P4 S6 I. B% q+ p* x$ C
  
" G2 q' R* c/ Q  D2 s ; O, Y: w9 B1 t3 Z; E

6 I' m4 D$ M+ e2 M' \) K 图1 在PIX中创建一个实验9 e' v& P9 r) z0 m* X9 S: {! z9 Y
6 v7 U, \8 @3 v, `, s3 g- Y
用PIX创建一个实验,运行后,截取D3D应用程序的调用,可以生成一个调用记录文件。经常的做法是创建一个实验,指定一个快捷键,并设置在按键触发时捕获所API调用,再设置自动保存到实验运行文件(*.PIXrun),而实验设置本身又可以存为一个很小的实验文件(*.PIXexp)。程序退出时或打开实验记录时界面切换到下图的样子。下图是从wikipedia借来的主界面图,图中展示的是程序录制的结果。
4 F  l0 b7 d7 H# H
! n+ f1 v6 ?* I1 g   
7 C5 a- c/ b/ S' P* G- v 8 |' t7 |6 R- z

2 g) x1 ^  {9 k7 q. L( G图2 PIX调试分析界面* b" L9 Q% [- y$ h) s; D" [
5 i0 p6 b+ g& g0 c* \" ?' \
图2中的4个视图分别显示了时间轴,对象列表,事件列表,渲染目标和对象查看视图。 在事件中,可以切换录制的帧,展开树型列表,可以看到在这一帧中对D3D/D3DX函数的调用情况,参数以及返回值。其中蓝色的是地址,代表一个对象指针,点击它可以在右边显示。当选择一个帧时,对象视图中的有些对象变成Alive,这代表这个对象在这一帧中是可用的,双击即可查看。图中选中的是某帧中第2727次函数调用的情况,这是一个SetTexture调用。5 z, |8 Y4 }& u# i8 q
2 `8 L/ w" A' V. o' y1 p* g: T
渲染和对象查看视图中列出了对象的属性,在上部可以设置过滤和排序,每列显示了他被释放的时间(第几帧),引用计数器、分辨率等信息。需要注意的是,只有在事件列表中选中了某一帧,并且打开了右下角的对象查看器中的Render窗口,才能使对象变成可用,当对象可用时,双击对象列表中的对象或直接双击事件列表中指针,就可以在一个新窗口中显示了。我用的版本可能存在一个bug,显示第2个对象就会崩溃,所以可能需要一个对象查看标签后才能打开下一个对象。图2中右下角视图显示的是一个表面。
+ x' a# E& ^  E, Y1 e
4 Y' w2 T& o% T9 w3 o3 u1 J" k4 K. U2.实验内容简介
0 i3 Q# Q  U+ f  a要使用PIX对应用程序进行测试,需要建立一个个实验,此实验需要设置应用程序的路径和运行参数,另外选择你要测试的项目,所有测试参数选择好之后,就可以开始测试了,这些测试参数可以保存为一个脚本文件,以后可以反复测试。( ]- K# A% d$ j) A+ Z, b5 h' s4 x
0 q& E/ ^- T) H* e/ E! f% J8 E+ d
此工具的位置:
* T' B+ c2 p5 N. A/ y4 L3 V
  b  m2 R% {8 b7 r. TMicrosoft DirectX SDK (June 2006)\Utilities\Bin\x86\PIXWin.exe
4 d% {- _  k/ o
# Q" U- d" i* z" t* z2 d此工具的完整文档位于帮助文档的如下位置:$ V& N# O( L, Z& w

. R, c, A& s. v: k- t9 |DirectX Software Development Kit\DirectXTools\PIX
" _0 g3 G6 \) c! A  h& g8 H6 z8 Z1 r+ f+ e  F! }0 {# T9 x
如果打开帮助文档,使用搜索,输入PIX也能很快定位到这部分文档,从开始菜单中可以直接启动该工具。
& w5 b1 j' I5 P& T( W) ]" _* O# K4 u0 n5 u* z2 Z* m$ f6 W
本文旨在以用户角度而不是MS角度介绍此工具的使用。
* u3 |, E1 u" n  b) }1 K7 H# ]1 g7 u) l4 S- [0 y
能测试或记录的项目包括:$ G/ f* F/ q& d5 O  R

6 P5 L4 \8 {5 b, j(1).每Frame对D3D/D3DX函数的调用,以及参数,可以多次记录单个Frame,也可以记录一段Frame;  q, K% \. a0 p( h0 f
9 K8 N8 P3 n) `! g
(2).截取屏幕;
# J; ~1 K: ]8 G$ a4 t1 j& b7 O* l
+ y, ~+ s( |3 G5 ~! K$ t1 U3 K(3).每Frame的计数器,以曲线方式显示在屏幕上,包括提交DP,DIP,DUP,DUIP,SetRenderState,SetTexture等请求的数量,的三角形数量,这里,统计的项目可以灵活设置;
  X! K! V: G- a2 b3 t5 R& Y0 y, m0 g# O: t
(4).设备修改;: [/ k! _1 w; |* w1 e7 D

4 H  V6 D# i+ b5 G' g(5).拦截Draw调用;
" X6 `$ ]6 n- J9 O" I" S+ e
# c) N: ]) W0 a# s(6).保存设备状态到文件;& e; S. b$ A/ A* A! ^. @. c

. a! {4 h  ~% ]/ {" n(7).记录API调用时的数据,包括纹理,顶点和索引的数据,在重绘时,可以查看提交的每个纹理以及纹理的完整数据;
, K* P* y! F$ ~: V
+ d) o) K, c, }(8).保存实验记录,将所有试验中处理的数据保存到一个文件中,当然,如果完整记录所有Frame,文件可能比较大,一般只记录关键的几个点。实验记录可以脱离原EXE和资源使用,如果日后需要分析,也只需要这一个文件。
; L& k$ m+ V! r2 `; E# g6 l  V% @3 Y
4 Q% O9 d) m9 ~) e+ d/ a实验数据保存后,可以反复查看,其中包括保存的各个帧。; `& a& f8 f  t
! l; f1 h- V  b6 u8 z4 w
有了这些测试项目,你可以检查你的应用程序是否提交了正确的状态,释放了不再使用的纹理,如果在某帧一个纹理在某帧还可用,而工具中的渲染窗口还在激活时,此纹理将显示可用,您可以在双击事件列表里的指针或对象表中的条目查看各种数据(顶点,索引,以反汇编形式显示的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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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