Исправление зависания Deadlock с ошибкой Xid 109 появилось в DXVK, а не в драйвере Nvidia

Исправление зависания Deadlock с ошибкой Xid 109 появилось в DXVK, а не в драйвере Nvidia

Изменение в DXVK, слое совместимости Proton для запуска игр Direct3D через Vulkan, вероятно устраняет зависание Deadlock, связанное с расширением VK_NV_raw_access_chains. Однако исправление пока находится только в ветке master и ещё не вошло в выпущенную сборку Proton.

Исправление для зависания Deadlock, которое игроки Linux связывали с ошибкой Nvidia Xid 109, появилось в DXVK. Речь идёт о слое совместимости, используемом Proton для запуска игр Direct3D через Vulkan, а не об обновлении драйвера Nvidia.

Запрос на изменение DXVK под номером 5958, «Merge overlapping buffer loads», открыли 8 октября. В ветку master его объединили 10 октября в 11:39:55 UTC; к 21:46 UTC того же дня изменение уже было отмечено как слитое. Сценарий воспроизведения включает выбор героя, переход на тренировочный полигон Deadlock и применение двух способностей при использовании стандартного рендерера DirectX 11.

Что изменилось в DXVK

Патч добавляет отдельный этап обработки пересекающихся загрузок буфера. Сопровождающий DXVK Филипп Реболе отметил, что изменение, «по какой-то причине», устраняет некоторые зависания, связанные с NV_raw_access_chains, хотя сама обработка может быть полезна и в общем случае. Для проверки результата он запросил большое количество тестов и отдельно указал, что речь идёт только о D3D11.

Это описание не является окончательным объяснением причины сбоя. Единственное заявление об устранении зависания также принадлежит участнику проекта DXVK: 10 октября в 15:28 UTC он написал, что зависание Deadlock должно исчезнуть в master-ветке DXVK.

Исправление зависания Deadlock с ошибкой Xid 109 появилось в DXVK, а не в драйвере Nvidia

Какие наблюдения связали сбой с расширением Nvidia

Исходная проблема описана в issue 1409 трекера открытого модуля ядра Nvidia. Её открыли 30 сентября, и на момент публикации обсуждение оставалось открытым. В сообщении говорится о полном зависании Deadlock на RTX 2070 с открытым драйвером 615.71.09: изображение останавливалось, звук продолжался, а остальная часть рабочего стола оставалась работоспособной.

Автор отчёта заранее изолировал воспроизводимый сценарий и сравнил несколько конфигураций при одинаковых драйвере, ядре, сборке Proton и четырёх шагах на тренировочном полигоне:

  • при использовании VK_NV_raw_access_chains ошибка Xid 109 возникала каждый раз;
  • при параметре dxvk.enableNvRawAccessChains=False не было ни зависания, ни Xid, ни ошибки DEVICE_LOST;
  • отключение кучи дескрипторов DXVK при сохранении расширения снова приводило к Xid 109.

Такое сравнение указывает на связь сбоя именно с расширением, а не с используемой моделью привязки ресурсов. При этом это пользовательские наблюдения, а не подтверждённое Nvidia описание дефекта.

Исправление зависания Deadlock с ошибкой Xid 109 появилось в DXVK, а не в драйвере Nvidia

Ещё два компьютера показали похожую картину на том же открытом модуле 615.71.09. На RTX 5070 с архитектурой Blackwell и графическим процессором GB205 наблюдались такое же зависание и такой же обходной путь. На ноутбучной RTX 3050 Xid появился в Genshin Impact 7.1.0 примерно через полтора часа работы, то есть не сразу и не в том же воспроизводимом сценарии.

Почему это ещё не исправление для всех пользователей Proton

Строка Xid 109 с сообщением CTX SWITCH TIMEOUT выводится модулем ядра Nvidia, когда переключение контекста не укладывается в отведённое время. Это симптом, а не установленный диагноз. В обсуждении issue 1409 не было комментариев от людей, представляющих Nvidia: у всех комментариев указана авторская принадлежность NONE.

Кроме того, попадание изменения в master не означает, что оно уже поставляется пользователям. В master ведётся разработка DXVK, тогда как Proton распространяет собственную встроенную сборку и не отслеживает эту ветку напрямую. Поэтому на момент публикации ни одна выпущенная версия Proton не содержала данный патч.

Область исправления также ограничена D3D11. Она не охватывает vkd3d-proton, где сообщалось о похожих проблемах в играх с Direct3D 12. Теперь пользователям, столкнувшимся с зависанием, предстоит проверить, устраняет ли новая версия DXVK Xid 109 именно в их конфигурациях.

Источник: VRealm

11