Как поддерживать мульти-GPU системы в Media Foundation? - PullRequest
0 голосов
/ 18 января 2019

Мне нужно создать устройство и контекст D3D на правильном графическом процессоре, который является графическим процессором, реализующим кодировщик.

В документации для 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", поэтому я могу разобрать это в число и сравнить с полем VendorId структуры DXGI_ADAPTER_DESC. Однако в документации по этому атрибуту говорится, что поддержка не является обязательной.

Мне не нравится опционально, я хочу надежного. Как сопоставить аппаратные кодировщики MFT с графическими процессорами? Будущие ПК с двумя графическими процессорами от AMD, такие как Asus FX505DY, трюк с идентификатором вендора, не будут работать на таких системах.

1 Ответ

0 голосов
/ 18 января 2019

Экземпляры MFT [по крайней мере на стадии создания экземпляра] не зависят от устройства. Если в вашей системе два видеоадаптера с поддержкой NVENC, кодировщик MFT будет одинаковым с одинаковым CLSID.

Вы указываете графический процессор для использования с помощью сообщения MFT_MESSAGE_SET_D3D_MANAGER, который оборачивает устройство D3D и зависит от графического процессора. Здесь вы выбираете графический процессор для кодера.

Кроме того, FYI NVIDIA H.264 Encoder MFT, в частности, не может корректно работать с чем-либо, кроме основного видеоадаптера (включая, но не ограничиваясь this ), если не везде, по крайней мере во многих системах. , Насколько я понимаю, это ошибка Nvidia, которую они должны исправить в своей реализации MFT.

...