3

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

在此处输入图像描述

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

4

1 回答 1

4

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

于 2017-02-26T20:02:39.603 回答