Наивысший уровень D3D_FEATURE_LEVEL равен 9,3 на машине с возможностью 11

В настоящее время я читаю «Введение в программирование трехмерных игр с помощью DirectX 11» Фрэнка Луны и только что подошел к той части, где я загружаю свой первый шейдер.

После связывания с соответствующими библиотеками, чтобы иметь возможность компилировать шейдеры, я был вынужден переключиться на набор инструментов VS 2010, чтобы мое приложение не пыталось использовать библиотеки Windows 8.1 (которые включают DirectX, поэтому он конфликтовал с моим июньским каталогом SDK).

Теперь у меня есть все, что нужно для компиляции, однако мой вызов функции D3D11CreateDevice теперь сохраняет D3D_FEATURE_LEVEL_9_3 как мой самый высокий поддерживаемый уровень функций. Раньше этого не было. Я подтвердил на моем dxdiag.exe, что моя система может поддерживать 11. Я также подтвердил это в панели управления NVidia, где указано, что версия DirectX Runtime - 11_0.

Из того, что я читал от других людей, у которых были подобные проблемы, было то, что их основной видеоадаптер был адаптером по умолчанию. Однако у меня только один адаптер, так что мой GTX 670 должен быть моим основным адаптером, верно?

Моя среда: Visual Studio 2013 (с использованием набора инструментов VS 2010) Видеокарта: GEFORCE GTX 670M (с поддержкой dx11) НОУТБУК ASUS G75V 64-разрядная версия Windows 7

Тем не менее, вот мой звонок, чтобы проверить уровень функциональности.

// Create Direct3D Device
HRESULT hr = D3D11CreateDevice(
    0,
    D3D_DRIVER_TYPE_HARDWARE,
    0,
    createDeviceFlags,
    0, 0,
    D3D11_SDK_VERSION,
    &m_d3dDevice,
    &featureLevel,
    &m_d3dImmediateContext);

if (FAILED(hr)) {
    throw Error("Direct3D Device Creation Failed!");
}

// Check feature level
if (featureLevel != D3D_FEATURE_LEVEL_11_0) {
    throw Error("Direct3D Feature Level 11 not supported!");
}

Отладка уровня функций

Мы будем очень благодарны за любой вклад относительно того, что, черт возьми, происходит. Direct3D - это довольно новый для меня мир, поэтому не торопитесь.


person SystemsThinker    schedule 08.11.2014    source источник
comment
Вероятно, это компилятор, который вы используете; MSVC 10 считается устаревшим в Windows 8. Среда выполнения DX, скомпилированная для этой версии, скорее всего, ограничена DX9, поскольку DX11 логически будет использовать преимущества определенных системных возможностей, доступных только через MSVC 12 или выше, который, в свою очередь, поддерживается только в Vista, 7 и 8. Я бы посоветовал Windows 8 SDK исключить неявные библиотеки DX и использовать более новый компилятор :)   -  person Qix - MONICA WAS MISTREATED    schedule 08.11.2014
comment
Устанавливаете ли вы какие-либо ограничения или переопределения на уровне функций с помощью dxcpl.exe? Или вы создаете приложение для Магазина Windows? Есть инструменты, которые вы можете непреднамеренно использовать в Force 9.3, чтобы ваше приложение работало на всех устройствах. Кроме этого, похоже, что с вашим кодом все в порядке. Кроме того, MSVC10 (при условии, что вы имеете в виду VS 2010) подойдет.   -  person MooseBoys    schedule 09.11.2014
comment
Я создаю приложение Win-32 и статический проект библиотеки. Я попробовал свой проект в VS10, и та же проблема не исчезла. Я читал больше и думаю, что это обычная проблема с ноутбуками NVidia. Когда я открываю DirectX Caps Viewer , Он показывает правильный уровень D3D_FEATURE 11_0, связанный с моей видеокартой. Но когда я открываю другую программу просмотра крышек DirectX (у меня по какой-то причине ее несколько EXE), она показывает карту с поддержкой 9_3. Я собираюсь попробовать что-нибудь, когда у меня появится шанс, связанный с постоянным переключением моего основного графического устройства на более мощное, хотя я думал, что у меня только одно устройство.   -  person SystemsThinker    schedule 09.11.2014
comment
Вероятно, у вас есть один из тех шагов NVIDIA Optimus, которые постоянно пытаются заставить вас использовать встроенную интегрированную часть Intel. Используйте панель управления NVIDIA, чтобы изменить это поведение.   -  person Chuck Walbourn    schedule 09.11.2014
comment
Я читал о NVIDIA и, похоже, моя видеокарта GTX 670m не поддерживает optimus. Это доказано мной при попытке установить драйверы, но безуспешно. Я просто попробовал EnumAdapters1 практически в цикле while, и лучший вариант - 9_3. Думаю, мне просто придется разрабатывать на другой машине или что-то в этом роде .. :(   -  person SystemsThinker    schedule 09.11.2014


Ответы (1)


У меня была такая же проблема в Windows 8.1 с видеокартой ATI Radeon 6xxx. Средство просмотра крышек сообщило об уровне функции 11_2, в то время как D3D11CreateDevice вернул устройство с максимальным уровнем 9_3.

Наконец, я обнаружил, что установил DirectX SDK в июне 2010 года. Его удаление решило проблему.

person Jaroslav Mazanec    schedule 29.11.2015