调试 DirectX 图形
Visual Studio 包含您可以用于帮助解决基于 DirectX 的游戏或应用程序中的呈现问题的诊断工具。
在 Visual Studio 调试 DirectX 图形
调试在游戏或应用程序的呈现问题通常不是如启动调试器和通过代码单步执行一样简单。 诊断图像呈现问题存在多个特殊的难题。 例如,在任何给定的帧内,都会产生成千上万 - 如果不是百万 - 像素,产生出来而无法看见的像素会是这一数量的数倍 - 其中,只会有一小部分像素会显示您尝试诊断的问题。 此外,则可能在每次呈现的帧后是几 GB 的数据和复杂进一步的事项,所有这些数据拆分在数百个或千位的工作专用处理的单元中,在中心处理格以外 (CPU) 的直接观测的专用硬件处理。 传统的调试器不是为解决这些类型的难题而生成的。
在 Visual Studio 中的图像诊断工具旨在通过启动指示问题的视觉瑕疵帮助您找到呈现问题的源,然后通过相关着色器代码、图形管线、绘制调用、资源和设备,甚至通过应用程序自身的源代码进行反向跟踪。
这是某些控件呈现问题,出现此类问题时,Visual Studio 可帮助您。
设备状态
图形设备的正确配置很重要,因为它设置模型和纹理数据必须满足在整个应用程序中的预期。 例如,如果设备状态指定环绕顺序为顺时针,那么任何将顶点指定为逆时针方向的模型都不会正确呈现;或者,如果深度测试功能设置为“大于”,较远的对象会绘制到较近的对象的顶部。 因为源代码中的根本问题是通常从受影响的对象移除很大,所以设备状态问题可能很难诊断。
图形诊断可帮助您检查受影响的像素背后的数据和设备状态,以使您可以缩小设备状态问题范围。
着色器 bug
在应用程序代码中出错几乎是不可避免的,无论代码是 C++ 还是高级着色器语言 (HLSL)。 但是,传统上,调试 HLSL 代码非常困难,因为它不像 C++ 和其他语言那样有丰富的调试支持。
图形诊断可帮助您寻找并修复着色器 bug,因为利用它可以调试 HLSL 代码。 通过在图像日志捕获的信息,HLSL 调试器能够以着色器级别“播放”绘制事件,以便可以执行步骤,设置断点,然后检查临时变量、参数和常数缓冲区的内容。 为帮助您侧重点正确,图形诊断提供从绘制事件到 HLSL 调试器的入口(通过**“图像管道阶段”窗口)以及从各个像素到 HLSL 调试器的入口(通过“图像像素历史记录”**)。
未初始化的或不正确的参数和常量。
图形应用程序使用参数和常量缓冲区向图形管道高效提供信息,使得不同的对象可以由自定义着色器代码转换或呈现。 当常量缓冲区或参数未初始化时,或者,当它不包含与预期的值时,可能对应的对象不正确或不呈现。 常量缓冲区或参数的问题可能很难诊断,因为由着色器代码中的 bug 不总是完全该错误是否由常数缓冲区或参数的问题引起,或者,属性,并且,如果它是着色器 bug,着色器对应于它。
图形诊断可帮助您识别该错误对应的着色器,并使用 HLSL 调试器检查着色器代码,以便您缩小参数和常量缓冲区问题范围。 当您对着色器代码是正确的感到满意时,可以使用 HLSL 调试器来确认可疑参数或常数,使用**“图像事件调用堆栈”**来导航到呈现受影响的对象的应用程序的代码,然后找到最后设置的参数或常数的缓冲区。
DirectX 版本兼容性
图形诊断支持使用 Direct3D 10、Direct3D 10.1、Direct3D 11 和 Direct3D 11.1 的应用程序,并对使用 Direct2D 的应用程序提供有限支持。 它不支持使用 Direct3D、DirectDraw 或其他图形 AIP 的更早版本的应用程序。
受限的 Direct2D 支持
由于 Direct2D API 为其功能使用 Direct3D API,图像诊断可用于帮助调试应用程序使用 Direct2D。 但是,由于图形诊断与基础 Direct3D 事件而不是更高级的 Direct2D 事件挂钩,它不会捕获不使用 Direct3D 的 Direct2D 事件的详细信息。 此外,因为 Direct2D API 调用和结果 Direct3D API 调用之间的关系始终不明确,使用 Direct2D 应用程序的图像诊断不直接。 但是,可以使用图像诊断有关低级别的呈现问题的信息在使用 Direct2D 的应用程序。
操作系统和 SDK 要求
Windows 8 安装通过所述文档的图像调试功能需要运行时组件。 若要在 Windows 7 和 Windows vista 的使用这些功能,您必须安装以下软件开发工具包 (SDKs)之一:
DirectX SDK(2010年6月)
Windows SDK(版本 7.1)
相关主题
标题 |
描述 |
---|---|
描述如何使用图形诊断诊断和调试在基于 DirectX 的应用程序的呈现问题。 |
|
提供指向演示如何使用图像诊断获取图形信息和诊断呈现问题的常见的文章。 |
|
介绍 Visual Studio 中的调试功能。 |
|
提供指向探讨 DirectX 图形技术文章。 |