ООшибки

Четыре разные неисправности GameLoop называют одной ошибкой DirectX

Failed to initialize DirectX, DXGI_ERROR_DEVICE_HUNG и DXGI_ERROR_DEVICE_REMOVED описывают три несвязанных отказа. Текст сообщения решает, что чинить; угадывание съедает вечер.

DirectX — это слой, через который рисует GameLoop, поэтому почти всё, что идёт не так между эмулятором и видеокартой, всплывает с DirectX в сообщении. Родственными эти отказы от этого не становятся. Под одной вывеской живут четыре разные неисправности, и единственное, что их разделяет, — текст сообщения.

СообщениеЧто оно означает на самом деле
Failed to initialize DirectX 11/12Устройство отрисовки так и не было создано — драйвер или видеокарта, которая не умеет того, что у неё попросили
GetDeviceRemovedReason failed, DXGI_ERROR_DEVICE_HUNGВидеокарта перестала отвечать посреди кадра, и Windows сбросила драйвер
Your PC does not support DirectX 11Отчёт о возможностях, правдивый или нет, приходящий от драйвера
DXGI_ERROR_DEVICE_REMOVEDВидеокарта исчезла целиком — падение драйвера, нестабильные частоты или питание

Отказы инициализации

Этот появляется раньше игры, и обычный ответ здесь — графический драйвер. Берите драйвер с сайта самого производителя видеокарты, а не из Windows Update, установите, перезагрузитесь.

Если ничего не изменилось, опустите режим отрисовки GameLoop с DirectX 12 до DirectX 11 в настройках движка. Поддержка DX12 на железе до 2018 года часто есть на бумаге и нестабильна на практике, а чаще всего страдает встроенная графика. Следующий запасной вариант ниже — OpenGL.

Запустите dxdiag, прежде чем решать, что железо отказало. Вкладка «Система» показывает используемую версию DirectX. Если там 12, а GameLoop настаивает, что ваш компьютер не тянет 11, значит, с железом всё в порядке, а драйвер неправильно выставляет уровень возможностей — удалите его в «Диспетчере устройств» и поставьте актуальную сборку производителя начисто.

Device hung и device removed

Эти два стоит отделить от инициализации, потому что они происходят во время игры, и ни один из них по сути не является багом GameLoop.

DEVICE_HUNG — это работа механизма Timeout Detection and Recovery в Windows: видеокарта не вернула кадр вовремя, и драйвер был сброшен из-под приложения. Перегрев, нестабильный разгон и наполовину применённое обновление драйвера — три вещи, которые вызывают это стабильно. Верните смещения частот ядра и памяти к заводским, следите за температурами под нагрузкой, а если драйвер обновлялся поверх старого, удалите его начисто через Display Driver Uninstaller — взятый с сайта его собственного разработчика — в безопасном режиме и только потом ставьте заново.

DEVICE_REMOVED — более тяжёлый родственник: видеокарта стала недоступна вовсе. Те же две первые проверки плюс питание. «Просмотр событий» Windows в разделе «Журналы Windows» → «Система» пишет подробности уровня драйвера от источников nvlddmkm у NVIDIA и amdkmdap у AMD. Фильтрация по ним вокруг времени падения скажет вам больше, чем любой универсальный список решений.

Когда сообщения нет вовсе

Тихий выход GameLoop после экрана загрузки часто оказывается тем же отказом DirectX с подавленным диалогом. Журнал «Приложение» в «Просмотре событий», прочитанный по метке времени падения, обычно содержит настоящий код ошибки. До этого — две дешёвые проверки: отключите оптимизации во весь экран во вкладке «Совместимость» у ярлыка и восстановите Visual C++ Redistributables через «Параметры» → «Приложения» → «Установленные приложения»: компиляция шейдеров отказывает одной из первых, когда повреждена библиотека времени выполнения.

Что это не чинит

Переустановка DirectX 12. Переустанавливать нечего. Это компонент Windows, а не распространяемый пакет.

Правка реестра TdrDelay. Растягивание таймаута видеокарты мешает Windows сообщать о зависании. Видеокарта всё равно зависла. Это прячет тепловую или драйверную проблему вместо того, чтобы решать её, а на действительно нестабильной карте превращает восстановимый сброс в намертво замерший рабочий стол.

Переустановка GameLoop при ошибке device removed. Эмулятор — это процесс, который случайно работал в момент, когда видеокарта отвалилась от шины. Его переустановка не адресует ничего.

Откат обновления Windows на рефлексе. Это законный ход, когда ошибка началась в течение дня-двух после конкретного KB, а драйвер уже актуален. В качестве первой реакции на любое сообщение DirectX это крупное разрушительное действие с низкой вероятностью попадания.