该图是一个逻辑图,而不是所有内容实际如何实现的明确图。实际上,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 之间的最佳实践和表面共享