Ошибка 0x80070057 при вызове VertexShader для Direct3d11

В моей системе Windows 8.1 установлен Directx11, но моя видеокарта - Directx 9. Я пытаюсь использовать библиотеки SharpDX и получаю сообщение об ошибке «параметр неверен» при создании объекта VertexShader.

Вот что я пробовал

  1. Запуск Directx 9 и использование этих библиотек. Microsoft сейчас не разрешает скачивать библиотеки Directx 9 со своего веб-сайта.

  2. Запуск с программной эмуляцией. Это ранняя стадия разработки, поэтому на данном этапе меня устраивает эмуляция программного обеспечения. Эта попытка не удалась из-за другой ошибки.

Звонок такой. d3dDevice и vertexShaderByteCode не равны нулю

     new D3D11.VertexShader(d3dDevice, vertexShaderByteCode);

Вопрос 0. Есть ли способ определить, какой параметр ему не нравится? Я использую учебный код, который теоретически работал.

Вопрос 1. Ошибка исходит от видеокарты?

Вопрос 2. Это известная проблема?

Благодарность,

Джон


person John Mott    schedule 10.05.2016    source источник


Ответы (2)


Если вы включите уровень отладки Direct3D, вы должны получить дополнительную информацию о том, почему вызов не удался.

Как зовут вашу видеокарту? Какой уровень аппаратных функций Direct3D представляет собой ваше видео карта? 9.1, 9.2, 9.3? Вы можете проверить, запустив dxcapsviewer из командной строки Visual Studio. DirectX 11 может поддерживать уровни функций 9.1–12.1, поэтому вполне вероятно, что по крайней мере какой-то набор функций будет работать на вашем оборудовании.

person Chuck Walbourn    schedule 10.05.2016
comment
Спасибо. У меня 2 NVIDIA quadro 440. Они поддерживают 9. Это не игровые карты как таковые, но я всего лишь пытаюсь запустить и запустить программное обеспечение. Как включить уровень отладки? - person John Mott; 10.05.2016
comment
Вероятно, это должно поддерживать уровень функций 9.3, но вы должны это проверить. Инструкции по C ++ на уровне отладки см. В MSDN . Для SharpDX вы должны использовать SharpDX.Direct3D11.DeviceCreationFlags.Debug. - person Chuck Walbourn; 11.05.2016
comment
Я не понимаю, как работает слой отладки. Должен ли он генерировать данные в окне вывода для Visual Studio? Я не вижу здесь ничего полезного, кроме того, что было исключение. Думаю, мне не хватает общей картины того, как его используют - person John Mott; 11.05.2016

Я понял. Я использовал образец кода для DirectX 11, и версия пиксельного и вершинного шейдера была несовместима с картой DirectX 9, которая у меня была. При вызове компиляции шейдера версия пиксельного шейдера была ps_5_0, мне нужен был ps_4_0_level_9_1, версия вершинного шейдера была vs_5_0, а мне нужен был vs__4_0_level_9_1. «Недействительным аргументом» был скомпилированный код шейдера.

person John Mott    schedule 11.05.2016