了解 DXGI
Understanding DXGI
MSDN 上的 DXGI Overview 说 Direct3D API(10、11 和 12)位于 DXGI 之上,而 DXGI 位于硬件之上,如下图所示:
文章进一步提到,DXGI的任务基本上是枚举适配器和在屏幕上呈现图像。现在,如果 DirectX 位于 DXGI 之上,那么如何在实际硬件 (GPU) 上调用所有与数学相关的任务?还是架构概览有误,D3D_也直接访问硬件?
此图是逻辑图,而不是实际如何实现所有内容的明确图。实际上,Direct3D 和 DXGI 更多 'side-by-side' 而包含用户模式驱动程序 (UMD) 和内核模式驱动程序 (KMD) 的层是 Windows Display Driver Model (WDDM),它使用设备驱动程序接口 (DDI) 来与内核模式通信,内核模式又与硬件通信。在大多数情况下,不同版本的 Direct3D 也 'lofted' 一起使用相同的 DDI(即 Direct3D 9 和 Direct3D 10 遗留应用程序最终尽可能通过相同的 Direct3D 11 代码路径)。
因为 "DXGI" 表示 "DirectX Graphics Infrastructure" 此图将 DXGI API 与 WDDM 和 DDI 结合在一起。
DXGI API 的目的是将视频 hardware/output 枚举以及交换链 creation/presentation 从 Direct3D 中分离出来。回到 Direct3D 9 和之前的版本,这些都被集中在一起。从理论上讲,DXGI 应该在 Direct3D 版本之间变化不大,但实际上它的发展速度基本相同,处理 CoreWindow 交换链模型的许多变化 Windows Store apps / Universal Windows平台应用。
许多 DXGI API 确实供内部使用,尤其是在处理表面创建时。您需要使用 Direct3D APIs 创建 Direct3D 资源,而不是尝试直接使用 DXGI 创建它们,但您可以在某些地方使用 QueryInterface
来获取 DXGI 表面以执行某些操作,例如 inter-API 表面共享。在 Direct3D 11.1 或更高版本中,大部分设备共享行为已自动化,因此您无需处理 DXGI 即可将 Direct2D/DirectWrite 与 Direct3D 11 一起使用。
真正的问题是:为什么它对你很重要?
See DirectX Graphics Infrastructure (DXGI): Best Practices and Surface Sharing Between Windows Graphics APIs
MSDN 上的 DXGI Overview 说 Direct3D API(10、11 和 12)位于 DXGI 之上,而 DXGI 位于硬件之上,如下图所示:
文章进一步提到,DXGI的任务基本上是枚举适配器和在屏幕上呈现图像。现在,如果 DirectX 位于 DXGI 之上,那么如何在实际硬件 (GPU) 上调用所有与数学相关的任务?还是架构概览有误,D3D_也直接访问硬件?
此图是逻辑图,而不是实际如何实现所有内容的明确图。实际上,Direct3D 和 DXGI 更多 'side-by-side' 而包含用户模式驱动程序 (UMD) 和内核模式驱动程序 (KMD) 的层是 Windows Display Driver Model (WDDM),它使用设备驱动程序接口 (DDI) 来与内核模式通信,内核模式又与硬件通信。在大多数情况下,不同版本的 Direct3D 也 'lofted' 一起使用相同的 DDI(即 Direct3D 9 和 Direct3D 10 遗留应用程序最终尽可能通过相同的 Direct3D 11 代码路径)。
因为 "DXGI" 表示 "DirectX Graphics Infrastructure" 此图将 DXGI API 与 WDDM 和 DDI 结合在一起。
DXGI API 的目的是将视频 hardware/output 枚举以及交换链 creation/presentation 从 Direct3D 中分离出来。回到 Direct3D 9 和之前的版本,这些都被集中在一起。从理论上讲,DXGI 应该在 Direct3D 版本之间变化不大,但实际上它的发展速度基本相同,处理 CoreWindow 交换链模型的许多变化 Windows Store apps / Universal Windows平台应用。
许多 DXGI API 确实供内部使用,尤其是在处理表面创建时。您需要使用 Direct3D APIs 创建 Direct3D 资源,而不是尝试直接使用 DXGI 创建它们,但您可以在某些地方使用 QueryInterface
来获取 DXGI 表面以执行某些操作,例如 inter-API 表面共享。在 Direct3D 11.1 或更高版本中,大部分设备共享行为已自动化,因此您无需处理 DXGI 即可将 Direct2D/DirectWrite 与 Direct3D 11 一起使用。
真正的问题是:为什么它对你很重要?
See DirectX Graphics Infrastructure (DXGI): Best Practices and Surface Sharing Between Windows Graphics APIs