AMD FidelityFX™ Hybrid Shadows 示例
本示例演示了如何将光线追踪阴影和光栅化阴影图结合起来,以实现高质量和高性能。
AMD (Advanced Micro Devices) 和 LunarG 很高兴地宣布,GFXReconstruct 捕获/回放工具现在支持 DirectX® 12 (D3D12) 和 DirectX® Raytracing (DXR)。
LunarG 最初开发 GFXReconstruct 是为了捕获/回放 Vulkan 应用程序。这款免费使用的开源工具已被 Vulkan 开发者广泛采用。通过 AMD 和 LunarG 的合作,GFXReconstruct 已扩展到支持 DirectX 生态系统的应用程序捕获/回放。
D3D12 是 Windows 平台游戏的事实标准,自发布以来已用于数百款游戏的开发和部署。GFXReconstruct 添加 D3D12 支持,为开发者提供了另一个有价值的工具,以帮助分析和调试 D3D12 应用程序。此外,由于此最新版本的 GFXReconstruct 可通过开源许可免费使用,开发者可以自由使用此工具,并通过提供增强功能、支持或错误修复来回馈社区。
GFXReconstruct 套件是捕获/回放工具中一个可定制的瑞士军刀。在捕获方面,GFXReconstruct 提供代理库,用于将图形 API 调用记录到磁盘上的捕获文件中。在回放方面,GFXReconstruct 提供一系列命令行工具和脚本来读取和处理捕获文件。
最常用的捕获文件处理工具是 `gfxrecon-replay` 和 `gfxrecon-optimize`。`gfxrecon-replay` 工具用于回放捕获文件,`gfxrecon-optimize` 工具则生成具有改进回放性能的新捕获文件。有关 GFXReconstruct 中所有可用工具的更多信息,请参阅文档。
GFXReconstruct 背后的软件架构也非常具有可扩展性。它的编写方式允许开发者实现对其他图形 API 的捕获支持,并开发自定义的消费者/工具来处理捕获文件的内容。
让我们以捕获和回放AMD 的 Cauldron 示例为例,来说明如何使用 GFXReconstruct。我们建议从这类应用程序开始学习该工具,然后再处理更繁重的工作负载。为简便起见,本示例将使用发布存档中提供的默认设置的 GFXReconstruct。
解压缩发布存档后,我们会找到
代理库(以 DLL 形式)位于 `d3d12_capture` 文件夹内
工具和消费者(以可执行文件和脚本形式)位于根目录
首先,我们找到 GFXReconstruct 的代理库,并将它们复制到应用程序可执行文件旁边,如下所示。

其次,我们像往常一样运行应用程序,并到达感兴趣的场景。

第三,我们观察到 GFXReconstruct .gfxr 捕获文件的创建,该文件将在应用程序关闭后准备好进行处理。默认情况下,捕获文件将在应用程序的工作目录中创建,如下所示。

就是这样!
我们现在已获得一个“完整”的捕获文件,其中包含从应用程序启动到终止的所有内容。GFXReconstruct 还可以获取“修剪”的捕获文件,其中仅包含用户定义的帧范围。当需要查找排除加载屏幕的特定帧时,这很有用。要执行此操作,我们将需要更改一些捕获时间设置,如文档中所述。
只需运行:`gfxrecon-replay.exe

此时,我们可以通过选择的方式分析捕获的工作负载。我们可以收集性能指标、调试视觉伪影,或进行任何需要的操作——所有这些都无需运行实时应用程序。
此工作流中的另一个重要部分是对 D3D12 捕获文件的优化。这是通过在捕获文件上运行 `gfxrecon-optimize` 工具来完成的,该工具可以完成两件重要事情:
首先,优化器将删除未引用管道状态对象 (PSO) 的创建。此操作可以显著减少捕获文件的加载时间,尤其是在源应用程序创建了数千个未在捕获帧中引用的 PSO 的情况下。
其次,优化器将分析 DXR 工作负载并注入专用命令,以帮助 `gfxrecon-replay` 快速获取所需的 GPU 虚拟地址。此操作允许回放性能更接近原始应用程序。
对于那些对最佳 GFXReconstruct 回放体验感兴趣的用户,我们强烈建议在工作流中利用优化器。有关更多详细信息,请参阅文档。
此概述仅触及皮毛。
前往GitHub获取代码,阅读文档,并深入了解!