Direct3D 和 DXGI 之间的区别

Posted

技术标签:

【中文标题】Direct3D 和 DXGI 之间的区别【英文标题】:Difference between Direct3D and DXGI 【发布时间】:2019-01-11 07:19:19 【问题描述】:

我正在尝试使用 C++ 查询 Windows 机器以获取可用显卡列表。

这个 SO 问题有一个答案(来自 moxize),它提供了一种方法(d3d9.h): get-the-graphics-card-model

这个提供了另一个(dxgi.h):dxgi enumadapters

当我尝试每一种时,我发现上面的 dxgi 方法列出了所有卡,而 d3d9 似乎只提供了一个,这取决于选择的NVIDIA 控制面板中的“首选图形处理器”。

我很难理解上述每条程序化路线提供的功能和用途之间的区别?

【问题讨论】:

如果有兴趣,我最后使用了 CUDA Driver API,由 C:\Windows\System32 中的 nvcuda.dll 提供。部分版本管理和设备管理给了我我所追求的 【参考方案1】:

DirectX 图形基础结构 (DXGI) 是随 Vista 一起引入的。它基本上考虑了 Direct3D 之外的所有枚举、显示和适配器管理以及演示内容。这样,各种图形 API 可以共存,而无需在每个 API 中为这些常见任务设置单独的机制。例如,它允许所有 Direct3D API (>= 10) 只关心将 3D 内容绘制到缓冲区中,而不关心这些缓冲区来自哪里,或者它们是否以及如何显示。

旧的 Direct3D 9 API 仍然有自己的适配器枚举接口。如果我没记错的话,Direct3D 9 过去只列举实际连接了显示器的适配器。很可能是因为 API 并没有真正支持无头渲染,所以尝试使用没有输出的适配器是没有意义的。另一方面,DXGI 在您的机器上对整个video and present network 进行更完整的操作。最重要的是,它区分了适配器(显卡)和输出(连接到适配器的显示器)。我假设您正在笔记本电脑或其他具有集成和专用 GPU 的机器上运行!?在驱动程序控制面板中切换“首选图形处理器”很可能会更改两个 GPU 中的哪一个(逻辑上)连接到显示器。然后 Direct3D 9 将始终只枚举那个……

【讨论】:

请注意,Windows 2018 年 4 月 10 日更新附带的最新版本 DXGI 1.6 对处理具有离散和集成 GPU 的笔记本电脑提供了更好的明确支持,而不是控制面板所做的有些笨拙的事情.见DeviceResources 和this commit。

以上是关于Direct3D 和 DXGI 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

Direct2D 和 Direct3D 互操作性的方法

使用命名空间代替类

d3d9 抓取windows屏幕

语法错误:缺少;前 *

游戏引擎与物理引擎与几何建模内核之间的区别

opengl和opencv的区别