Как отлаживать ошибки DXGI_ERROR_INVALID_CALL?
Я разрабатываю приложение, использующее SharpDX, и на одной из моих машин вызывает вызов
с сообщением об ошибке
HRESULT: [0x887A0001], модуль: [SharpDX.DXGI], ApiCode: [DXGI_ERROR_INVALID_CALL /InvalidCall], сообщение: неизвестно
Приложение предоставило неверные данные параметров; этот должен быть отлажен и исправлен до того, как приложение будет выпущено.
Сообщение об ошибке не дает мне никаких указаний на почему сбой создания.
Я проверил вывод уровня отладки, но это только показывает информацию. Нет Предупреждение, нет ошибки, ничего. Завод и устройство созданы просто отлично, и я попытался выполнить несколько комбинаций параметров в SwapChainDescription, но ошибка всегда остается прежней.
Как мне узнать, что вызывает ошибку?
Просто, чтобы быть ясным: я не так сильно ищу решение для своей конкретной проблемы, так как мне интересно, как я буду отлаживать такую проблему в целом.
Я подтвердил, что описание образца действительно с помощью
(хотя все равно 1 и 0), что формат поддерживается с помощью
, а также проверили, что
Обновление: Я смог исправить проблему, следуя советам здесь :
1 ответ
Обычно это происходит при вызове функции D3D с недопустимым параметром (например, указателем NULL, если это не разрешено). Это именно то, что конструктор SwapChain документация :
InvalidCallException Недопустимый вызов метода. Например, параметр метода может содержать недопустимое значение.
В вашем случае, поскольку он не работает на одной конкретной машине, вы, вероятно, запрашиваете материал, который не поддерживается его оборудованием, например. Уровень D3D слишком высок для графического чипа.
Иногда это помогает проверить образцы, предоставленные Microsoft, чтобы проверить, какие параметры они передают, и увидеть различия, которые могут вызвать проблему.
Исправить ошибку DXGI ERROR DEVICE HUNG в Windows 10
Ошибка DXGI ERROR DEVICE HUNG появляется при неправильно сформированных команд, отправленных приложением. Ошибка часто появляется в играх как Apex Legends, PUBG, The Division, Battlefield или Call of Duty. Виновником данной ошибки может быть поврежденный DirectX или драйвера видеокарт как Nvidia, AMD, Intel. Разберем, как исправить ошибку DXGI_ERROR_DEVICE_HUNG в Windows 10.
1. Драйвера видеокарты
Самый действенный способ с драйверами видеокартами это переустановить их, удалив полностью. Это очень проблематично сделать средствами по умолчанию. По этому, нужно воспользоваться программой Display Driver Uninstaller, которая автоматически удалит все драйвера связанные с видеокартой. Далее перейдите на официальный сайт Nvidia, AMD или Inel и скачайте официальную последнюю версию видео драйвера. Обратитесь ниже к подробному руководству по удалению.
2. Обновить DirectX
Поврежденный DirectX может выдавать ошибку DXGI ERROR DEVICE HUNG в играх. Перейдите на официальный сайт Microsoft и скачайте последнюю версию.
3. Проблемы RAM
Если вы используете ПК, то попробуйте достать одну планку оперативной памяти. Также, меняйте планки одну или две в разные слоты. Вы также можете провести программно диагностику оперативной памяти на ошибки обратившись ниже к руководству.
4. Отключите звуковую карту
Если у вас на ПК имеется отдельная звуковая карта, то её нужно отключить и проверить. решена ли проблема. На форуме Microsoft, именно звуковая карта для многих пользователей стала виновником данной ошибки. Вы её можете извлечь физически, достав плату с компьютера или отключить программно, как показано ниже.
Нажмите Win+X и выберите «Диспетчер устройств«. Далее разверните графу «Звуковые, игровые и видеоустройства» и нажмите правой кнопкой мыши по звуковому устройству, после чего выберите «Отключить устройство«.
Ошибка DXGI_ERROR_DEVICE_REMOVED: причины и решения
DXGI_ERROR_DEVICE_REMOVED — это ошибка, которая возникает при запуске или работе игр/программ, использующих ресурсы видеокарты. Пользователи отмечают, что эта ошибка может также появляться в случайные моменты при работе компьютера.
В некоторых случаях к ошибке DXGI_ERROR_DEVICE_REMOVED прилагается достаточно объемное сообщение, в котором утверждает, что видеодрайвер был обновлен либо видеокарта была отключена от системы.
Причины DXGI_ERROR_DEVICE_REMOVED
Решение DXGI_ERROR_DEVICE_REMOVED
Решение №1 Обновление DirectX
Решение №2 Отключение ShadowPlay
Владельцы видеокарт Nvidia утверждают, что им в борьбе с ошибкой помогло отключение ShadowPlay. Последний мог начать конфликтовать с запускаемой видеоигрой. Деактивировать запись игрового процесса можно через панель управления видеокарты GeForce Experience. Для большей надежности еще можно отключить такие службы, как NVIDIA Display Driver Service, NVIDIA GeForce Experience Service, NVIDIA Stereoscopic 3D Driver Service и NVIDIA Streamer Service.
Решение №3 Увеличение файла подкачки
Еще в Интернете появлялись сообщения, будто эту неполадку можно исправить, увеличив файл подкачки. Работает такое решение не для всех, но попытаться стоит. Увеличить файл подкачки можно следующим образом (на Windows 10):
Запустите нужную вам игрушку и посмотрите, покажется ли ошибка DXGI_ERROR_DEVICE_REMOVED на этот раз.
Решение №4 Переустановка видеодрайвера
Переустановка видеодрайвера — надежное решение для многих проблем, возникающих при запуске ресурсоемких приложений. В процесс удаления драйвера входит следующее:
Скачать DDU можно по этой ссылке на официальном сайте разработчиков. Дважды кликните ЛКМ на DDU v18.0.2.2.exe и следуйте инструкциям на экране, чтобы установить DDU. После установки загрузитесь в Windows в безопасном режиме (это важно!) и запустите Display Driver Uninstaller. Перед вами покажется следующее окошко:
Выберите производителя ГП и нажмите «Удалить и перезагрузить (настоятельно рекомендуется». Ожидайте завершения чистки компьютера, а затем установите новую версию видеодрайвера. Еще раз перезагрузите ПК и проверьте наличие DXGI_ERROR_DEVICE_REMOVED.
Решение №5 Удаление недавно установленного ПО
Перед появлением ошибки устанавливали новые программы? Именно они и могли стать катализатором появления проблемы. Избавьтесь от этого ПО и протестируйте нужную игру/приложение. Также не стоит забывать, что некоторые сторонние службы могут конфликтовать с драйвером для видеокарты.
Чтобы это проверить, вам нужно выполнить безопасную загрузку.
По входу в систему проверьте наличие DXGI_ERROR_DEVICE_REMOVED. Если ошибка исчезла, то одна из отключенных служб несомненно ее вызывала. Дальше нужно поочередно включать службы, чтобы найти «виновника».
Решение №6 Корректировка параметров электропитания
Также вы можете попробовать избавиться от этой неполадки через изменение некоторых параметров электропитания. Ничего опасного в этих действиях нет — не переживайте!
Решение №7 Проверка видеокарты и ее подключения
Ошибка DXGI_ERROR_DEVICE_REMOVED стала возникать сразу после установки видеокарты? Вам нужно проверить несколько вещей: стоит ли видеокарта в правильном PCI-E, подключено ли к ней дополнительное питание (при наличии такового), все ли нормально с самой видеокартой, например, не окислились ли ее контакты, и так далее. Если же все нормально, то попробуйте переподключить видеокарту.
Решение №8 Изменение графических настроек в игре
А не пробовали ли вы понизить графические настройки в игре? Некоторые пользователи утверждают, что им удалось избавиться от ошибки DXGI_ERROR_DEVICE_REMOVED, понизив качество графики. Сглаживание, качество теней, освещения и текстур, дальность прорисовки деталей и другое — попробуйте понизить качество самых ресурсоемких настроек и посмотрите, изменится ли ситуация.
Dxgi error invalid call как исправить
Вопрос
I`ve decided to refresh my devices enumeration code with DXGI 1.2. Adapters, outputs, devices are working OK, but i’ve stuck on swap chain creation. Tried any possible type casts like Factory2 to Factory1, interfaces query but always get DXGI_ERROR_INVALID_CALL. Also tried sellectively pass nulls to parameters one-by-one, it also fails. I made a clean project: only plain window creation and code posted below. No classes, no 3rd party libs. And it fails. Any ideas on what`s wrong with my code?
(error checking omitted for simple view)
All HRESULTS are S_OK and, all pointers are valid, except SwapChain at the bottom, which are respectively DXGI_ERROR_INVALID_CALL and null;
Old CreateSwapChain works fine with alike description, same devices, HWND, and factory. But I don’t feel statisfaction with it =)
Second question is what is the best practice Querying interface?
Do I need Querying interface at all here? If yes, do I need to use one old pointer and one new pointer? Or I can pass the same? If I need second, can I release old pointer after querying?
I’m getting DXGI_ERROR_INVALID_CALL while calling CreateSwapChain. Here’s my code to create command queque.
Here’s where I’m calling CreateSwapChain.
My hr returns the above error. Any help would be appreciated.
Updates (Problem still exists)
1 Answer 1
First you should turn on the debug layer for a chance of a more meaningful message using D3D12GetDebugInterface and also set the flag DXGI_CREATE_FACTORY_DEBUG when you create the factory.
You should also give a try to CreateSwapChainForHwnd because CreateSwapChain is close to deprecation. For fullscreen mode, it has a separate argument. In the two cases, you need the flag DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH for it to succeed. And the recommanded practice is to create a swap chain windowed and then use SetFullScreenState because windows can deny you the switch anyway and this has to be handled.
Not the answer you’re looking for? Browse other questions tagged dxgi directx-12 or ask your own question.
Related
Hot Network Questions
Subscribe to RSS
To subscribe to this RSS feed, copy and paste this URL into your RSS reader.
site design / logo © 2021 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2021.9.16.40232
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.



