IDXGIFactory::EnumAdapters() не возвращает никаких адаптеров

#directx #directx-11 #sharpdx #dxgi

#directx #directx-11 #sharpdx #dxgi

Вопрос:

Я разрабатываю приложение DirectX11. Во время инициализации я перечисляю доступные графические адаптеры, как описано здесь .

Теперь для одного из наших клиентов количество доступных адаптеров равно нулю: EnumAdapters(0, amp;pAdapter) уже возвращается DXGI_ERROR_NOT_FOUND .

Как это возможно? Разве не всегда должен быть доступен хотя бы один графический адаптер? На компьютере установлена видеокарта с новейшими драйверами, и дисплей работает.

Примечание: Наше приложение фактически использует SharpDX, но процедура та же. Возвращается отказывающий эквивалент GetAdapterCount() 0 .

Комментарии:

1. Вы делаете это через IDXGIFactory или через IDXGIFactory1 ?

2. SharpDX.DXGI.Factory который использует IDXGIFactory внутренне. В чем разница между ними?

3. Я не знаю, это странная проблема, мне было интересно, не поддерживает ли эта неисправная система более поздний интерфейс, но на самом деле просто догадываюсь. Я не понимаю, почему это не должно работать для нулевого адаптера. Вы все еще можете создать устройство на этом адаптере и отобразить ok?

4. Я даже не дошел до того, что мог бы создать устройство, поскольку нет адаптера, с которого я мог бы его создать.

5. Да, наше приложение не поддерживает XP. Я вернусь к вам, как только получу ответ. Спасибо за вашу помощь до сих пор!

Ответ №1:

Я отвечу на свой собственный вопрос:

Как оказалось, эта проблема возникла, когда наш клиент попытался запустить наше приложение в безопасном режиме из-за другой несвязанной проблемы. В безопасном режиме графический драйвер не загружается, и, следовательно, адаптеров не будет.

Комментарии:

1. 1 — это полезная информация для всех, кто сталкивается с той же проблемой.

Ответ №2:

Обратите внимание, что с Windows 8.x вы получите адаптер «Microsoft Basic Renderer» в «безопасном режиме», который по сути является WARP устаревший драйвер вывода VGA. Некоторые последствия см. В этом сообщении.