【问题标题】:Difference between Direct3D and DXGIDirect3D 和 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 提供。部分版本管理和设备管理给了我我所追求的

标签: c++ windows nvidia direct3d dxgi


【解决方案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 的笔记本电脑提供了更好的明确支持,而不是控制面板所做的有些笨拙的事情.见DeviceResourcesthis commit
猜你喜欢
  • 1970-01-01
  • 2021-12-25
  • 2020-05-10
  • 2014-09-20
  • 2010-10-28
  • 2015-10-04
  • 2012-08-12
  • 2011-02-18
  • 2019-12-21
相关资源
最近更新 更多