了解 DXGI

Sam*_*Sam 4 directx dxgi

MSDN 上的DXGI概述表示 Direct3D API(10、11 和 12)位于 DXGI 之上,而 DXGI 位于硬件之上,如下图所示:

在此输入图像描述

文章进一步提到,DXGI 的任务基本上是枚举适配器并在屏幕上呈现图像。现在,如果 DirectX 位于 DXGI 之上,那么如何在实际硬件 (GPU) 上调用所有与数学相关的任务?或者架构概述是错误的,D3D_也直接访问硬件?

Chu*_*urn 5

该图是一个逻辑图,而不是所有内容实际如何实现的明确图。实际上,Direct3D 和 DXGI 更“并排”,包含用户模式驱动程序 (UMD) 和内核模式驱动程序 (KMD) 的层是使用​​设备驱动程序接口的Windows 显示驱动程序模型 (WDDM) (DDI) 与内核模式通信,内核模式又与硬件通信。在大多数情况下,不同版本的 Direct3D 也会“组合”在一起以使用相同的 DDI(即 Direct3D 9 和 Direct3D 10 旧版应用程序最终尽可能通过相同的 Direct3D 11 代码路径)。

由于“DXGI”意味着“DirectX 图形基础设施”,该图将 DXGI API 与 WDDM 和 DDI 混为一谈。

DXGI API 的目的是将视频硬件/输出枚举以及交换链创建/表示与 Direct3D 分离。回到 Direct3D 9 及更早版本,这些都被集中在一起。理论上,DXGI 在 Direct3D 版本之间应该不会有太大变化,但实际上,它的发展速度基本相同,涉及 Windows 应用商店应用程序/通用 Windows 平台应用程序的 CoreWindow 交换链模型的许多变化。

许多 DXGI API 实际上供内部使用,特别是在处理曲面创建时。您需要使用 Direct3D API 创建 Direct3D 资源,而不是尝试直接使用 DXGI 创建它们,但您可以QueryInterface在某些地方使用 DXGI 表面来执行某些操作,例如 API 间表面共享。在Direct3D 11.1或更高版本中,大多数设备共享行为已实现自动化,因此您无需处理 DXGI 即可将 Direct2D/DirectWrite 与 Direct3D 11 结合使用。

真正的问题是:为什么它对你很重要?

请参阅DirectX 图形基础结构 (DXGI):Windows 图形 API 之间的最佳实践和表面共享

  • 非常感谢您的详细解释。我一直对事物的内部运作方式感到好奇。就像你在计算机科学课程中学到的大多数东西一样,在现实生活中并没有直接的应用。 (3认同)