如何在媒体基础中支持多 GPU 系统

How to support multi-GPU systems in Media Foundation?

本文关键字:支持 GPU 系统 媒体      更新时间:2023-10-16

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

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

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

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

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

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

您可以通过MFT_MESSAGE_SET_D3D_MANAGER消息指定要使用的 GPU,该参数包装 D3D 设备并且特定于 GPU。您可以在此处为编码器选择 GPU。

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