| 2008年01月16日 00:00 | |
现在,您只要掌握一些基本原理来运用软件开发社区提供的几款工具,即可实现对英特尔® 集成显卡的轻松调试。本文介绍的所有方法都非常简单易行,您可像运用市面上推出的任何显卡硬件那样,轻松移植、调试和开发您的集成显卡代码。
首先,您需要了解英特尔提供的两种类型的集成显卡解决方案:3000 系列和 X3000 系列。由于采用英特尔老款 GMA 900 产品线,3000 系列仍然通过 Direct3D 的 HAL 中的处理器特定图形管线(PSGP),在软件(CPU上)中执行转换与投影(TnL)功能。而 X3000 系列则根据工作负载需求,选择性地执行硬件 TnL。与 X3000 系列引擎中的 DirectX9 管线相比,基于 DirectX8 或更早版本的一些工作负载则更适合采用 CPU-PSGP 路径。
多年来,一款名为 3dAnalyze*
的第三方工具一直被誉为最有价值的工具之一(参见图 1)。
图 1:3DAnalyze* 工具
英特尔工程师们在测试那些不能在 3000 系列显卡上运行的应用程序时,会着重检查该应用程序能否支持软件 TnL。由于 3000 系列不支持硬件TnL,因此这就需要应用程序来承担这项工作。3DAnalyze* 工具具备多项实用功能,其中之一便是“哄骗”应用程序相信显卡能够支持硬件转换与投影。开发人员可选择该工具中的 emulate HW TnL caps 选项(参见图 1 顶部)直接从 3dAnalyze 执行应用程序,轻松测试问题的产生是否是由于应用程序无法识别软件 TnL 而导致的。如果该程序在“仿效的” HW TnL caps 设置中运行正常,那么我们就可以缩小问题范围,断定问题来自与软件 TnL 支持相关的游戏问题。
另外一项测试是:在安装有对等的中等范围显卡的 3DAnalyze 上强制运行软件 TnL。如果应用程序依然无法运行,则说明该问题与英特尔显卡或驱动程序无关,是一个与软件 TnL 支持相关的游戏问题。如果应用程序能够运行,则说明英特尔驱动程序存在潜在的 bug,请您通过这里
的图形技术开发论坛,或在英特尔的显卡支持站点
上报告这一问题。
此外,3dAnalyze* 还支持“调试日志”功能,选中该选项后,系统将在目录/文件夹下创建一个测试应用程序的日志文件。如在调试文件中未出现以下任何一个文件:未带顺序D3DCREATE_SOFTWARE_VERTEXPROCESSING 的 D3DCREATE_PUREDEVICE 或 D3DCREATE_HARDWARE_VERTEXPROCESSING,则表明该应用程序在 3000 系列显卡上运行失败。这就意味着开发人员所开发的 Direct3D* 应用程序不支持软件顶点处理。
检测应用程序是否刻意不在英特尔® 显卡上运行的另外一种方法,就是使用 3dAnalyze* 选择性地将设备和厂商 ID 强行推送到已知可以运行的显卡。该工具拥有专用于此用途的特殊编辑框字段。开发人员还可登录英特尔软件网络,阅读名为《英特尔® 集成显卡的常见误解》的白皮书,来消除自己对英特尔® 集成显卡功能的所有误解。
如果您预计应用程序的填充率已达到极限,那么您可以使用该工具中的禁用纹理选项。尽管这种情况多数发生在性能指标评测而非实际游戏中,但我们还是应该准备好解决方案,以防患于未然。该工具可有效移除场景中的纹理,降低填充率的支出。
如果您认为应用程序中可能存在像素阴影吞吐量问题,那么可使用 3dAnalyze* 强行让应用程序缺省为较早的版本(即:1.1)。
当在英特尔® 集成显卡上调试像素阴影时,这一技巧非常实用。
首先,您必须知道正在分析支持的是集成显卡的哪个部件。为了找出这个部件,您需要使用 Direct X* SDK (在“Utilities ”文件夹中)所包含的 DX Caps viewer。这样就可以更轻松地理解调试输出消息了。关于该部件的 caps 位于<Device>
调试 Direct3D* 相关问题最实用的技巧之一,就是从一开始便启用 Direct3D* 调试运行时。首先请确保您系统上安装的是最新版 DirectX 9.0 SDK*。该软件可从微软官网上免费下载,通常网站每两月会进行一次更新。)您只需访问 Direct X 控制面板(位于 SDK “实用程序”文件夹中),便可启动调试运行时。
请记得在完成测试后,将运行时重新设置回零售时的配置,这样您便可以使用 DebugView* 或 DebugMon* 等工具来记录具体应用运行失败的详细错误消息。运行这些工具时,请不要使用已启用调试运行时或运行时版本已变更的 3dAnalyze* 或 FRAPS* ,否则会与正在执行的操作发生冲突(它们会连接到调试运行时)。
注意 PIX 仅可用于基于 Direct3D 的应用程序。对于 OpenGL* 应用程序,建议使用 glIntercept。本文中,我们主要论述 PIX*。它可以将范围具体缩小到单个帧或帧流(frame stream),是考察性能问题的一项出色工具。随着 DirectX 着色调试器的发展,开发人员有必要了解这其中的全部细节。
图 2:使用 Microsoft PIX* 调试应用程序的初始设置截屏
图 2.Microsoft PIX*
选择高级视图可提供更多选项。着色器常数及其上面的 lock 语句均为反映性能限制的出色指标。此外,查看每帧调用 SetRenderTarget 的次数也会对您有所帮助。如果该函数的每帧调用次数高于一次,英特尔® 集成显卡的性能将受到极大影响;如果您每帧调用该函数达 10 次以上,那么英特尔® 集成显卡的性能将受到非常严重的影响。
获取信息最有益的方法就是对丢失的单帧或完整帧进行加密,然后将其发送至:/en-us/forums/user-community-for-visual-computing
。而且对于单帧或完整帧 PIX 样本而言,更适宜在丢失后进行调试。单帧或完整流 PIX 结果采用相同的延展方式 - .PIXRun。采用加密格式传输这些结果是将 PIX 问题传达给英特尔开发社群的最佳方法。请注意,鉴于 PIX 完整流样本较大,因此您可以选择性地保存部分可能对整个空间造成巨大影响的流。
我们始终建议您采用最新版 PIX。PIX 会定期更新。此外,它还具备单帧捕捉(在渲染阶段进行)特性。对许多开发人员来说,选择恰当的工具 (PIXWIN*) 本身就是从样本中移除非渲染处理的一个诀窍。此时,请使用命令行选项“–playstandalone
在尝试调试应用程序无法运行的原因时,除了实用的单帧捕捉功能外,提供的流文件也非常有用。如果录制的流能够在非英特尔 GPU 上运行,那就说明英特尔驱动程序存在 bug,英特尔显卡驱动程序团队会即时关注该 bug,并在未来驱动程序版本中予以解决。您只需在实验中选择“Call replayable stream”选项,即可提供流捕捉。
另一项优化技术是使用三角带代替三角形列表,降低 VB 开销。该步骤通常会采用 Maya 或 3D studio max 等内容生成工具来完成。这项常见优化技巧可帮助您对所有的显卡部件进行编码。
在任何集成显卡平台上尝试调试或开发时,开发人员如能谨慎使用上述工具,必将有所斩获。此外,熟知各款英特尔集成显卡之间的关系将帮助您走出仅面向高端显卡解决方案受众的局限,进一步拓展客户群范围。
DeSylva 先生现任英特尔软件与解决方案事业部软件应用工程经理。他和他的团队负责优化各种运行于英特尔台式机系统上的尖端消费软件的性能。在从事应用软件优化工作之前,Chuck 是英特尔公司的一名驱动程序开发人员。他曾参与开发/部署面向 USB、AGP(GART)的首款设备驱动程序和英特尔首款图形设备(i740/810(e))。

