首页 > 解决方案 > Media Foundation 中如何支持多 GPU 系统?

问题描述

我需要在正确的 GPU 上创建 D3D 设备和上下文,这是实现编码器的 GPU。

的文档MFT_ENUM_ADAPTER_LUID说它需要 Windows 10,实际上 NVENC MFT 即使在 Win10 上也不会公开该属性。

的文档MFT_ENUM_HARDWARE_URL_Attribute说该值是设备驱动程序的符号链接,实际上 NVENC MFT 不返回任何 GUID 链接,该值与 in 相同MFT_FRIENDLY_NAME_Attribute,特别是L"NVIDIA H.264 Encoder MFT"

MFT_ENUM_HARDWARE_VENDOR_ID_Attribute似乎工作正常,返回,所以我可以将其解析为一个数字并与结构字段L"VEN_10DE"匹配。但是,该属性的文档说支持是可选的。VendorIdDXGI_ADAPTER_DESC

我不喜欢可选的,我想要可靠的。如何将硬件编码器 MFT 与 GPU 匹配?AMD 即将推出带有两个 GPU 的 PC,例如 Asus FX505DY,供应商 ID 技巧在此类系统上不起作用。

标签: c++windowsdirect3dms-media-foundation

解决方案


MFT 实例 [至少在实例化阶段] 不是特定于设备的。如果您的系统中有两个启用 NVENC 的视频适配器,则编码器 MFT 是相同的,具有相同的 CLSID。

您通过MFT_MESSAGE_SET_D3D_MANAGER消息指定要使用的 GPU,该参数包装 D3D 设备并且是特定于 GPU 的。这是您为编码器选择 GPU 的地方。

此外,仅供参考 NVIDIA H.264 编码器 MFT 特别无法与除主视频适配器(包括但不限于此)以外的任何东西正常工作,如果不是在任何地方,至少在大量系统中。据我了解,这是 Nvidia 的错误,他们将在其 MFT 实施中修复。


推荐阅读