WebGPU: советы и исправления по устранению неполадок

Франсуа Бофор
François Beaufort

Опубликовано: 7 февраля 2024 г., Последнее обновление: 17 октября 2025 г.

В этом документе объясняется, почему WebGPU может быть неработоспособен или работать не так, как ожидалось в браузере Chrome, а также приводятся четкие шаги по решению проблем, если это возможно.

В следующем примере показана ошибка JavaScript, которая может возникнуть, если gpu недоступен в navigator :

const adapter = await navigator.gpu.requestAdapter();
cancel Uncaught TypeError: Cannot read properties of undefined (reading 'requestAdapter')

Это может быть связано с одной из следующих причин. Проверьте их в указанном порядке:

  1. Для работы WebGPU требуется Chrome 113 или более поздней версии на ChromeOS, macOS, Windows и Chrome 121 или более поздней версии на Android. Проверьте свою версию на chrome://version и при необходимости обновите её.

  2. WebGPU доступен только в защищённых контекстах. Если вы используете незащищённый протокол (например, http: или file: , используйте безопасный протокол https: или устраните эту проблему при разработке веб-приложения одним из следующих способов:

    • Размещайте свой код локально на http://localhost или http://127.0.0.1 с помощью любой из следующих команд: npx http-server или python3 -m http.server .

    • Добавьте источник в список «Небезопасные источники, рассматриваемые как безопасные» chrome://flags/#unsafely-treat-insecure-origin-as-secure и перезапустите Chrome.

    • Установите Node.js и запустите npx servez --ssl , чтобы обслуживать папку по протоколу https с поддельным сертификатом. Предупреждение в Chrome всё равно будет появляться, но его можно обойти, нажав «Дополнительно», а затем «Перейти к...».

    • Откройте доступ к своему локальному веб-серверу из Интернета с помощью ngrok .

Адаптер графического процессора — нулевой

Ниже приведен пример ошибки JavaScript, которую вы можете получить, когда адаптер, полученный в результате вызова requestAdapter() равен null:

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
cancel Uncaught TypeError: Cannot read properties of undefined (reading requestDevice)

Это происходит по одной из следующих причин. Ознакомьтесь с ними в указанном порядке:

  1. WebGPU отключается, если пользователь отключил параметр «Использовать графическое ускорение (при наличии)» в chrome://settings/system . Проверьте, отключена ли эта настройка, и включите её снова.

  2. WebGPU пока не поддерживается на этой платформе. Вы можете включить флаг chrome://flags/#enable-unsafe-webgpu и перезапустить Chrome. Для экспериментальной поддержки в Linux также необходимо включить флаг chrome://flags/#enable-vulkan . Подробнее см. в статье о поддержке WebGPU в Chrome без заголовка .

  3. Аппаратное обеспечение графического процессора (GPU) специально занесено в список заблокированных устройств. Если на chrome://gpu отображается сообщение «WebGPU отключен через список заблокированных устройств или командную строку», вы можете отключить список заблокированных устройств WebGPU, включив флаг chrome://flags/#enable-unsafe-webgpu и перезапустив Chrome. Вы также можете переопределить список встроенного программного рендеринга, включив флаг chrome://flags/#ignore-gpu-blocklist и перезапустив Chrome.

  4. Для параметров, переданных в requestAdapter() , не существует соответствующего графического адаптера. Попробуйте вызвать requestAdapter() с другими параметрами .

  5. Для WebGPU требуется графический процессор (аппаратный или с программной эмуляцией). Проверить, обнаруживает ли Chrome графический процессор, можно на сайте chrome://gpu .

  6. Процесс графического процессора несколько раз аварийно завершался. Вы можете перезагрузить страницу или перезапустить Chrome. Подробнее см. в рекомендациях по устранению потери данных с WebGPU.

WebGPU медленнее, чем WebGL

  1. Откройте chrome://gpu и убедитесь, что вы видите надпись «WebGPU: Аппаратное ускорение». Если вы видите надпись «WebGPU: Только программное обеспечение, аппаратное ускорение недоступно», возможно, вам необходимо обновить драйверы видеокарты.

  2. Прямая реализация концепций WebGL в WebGPU может не в полной мере использовать уникальные возможности оптимизации WebGPU. Подробнее об отличиях WebGL от WebGPU можно узнать в статье «От WebGL к WebGPU» .

Ограничения, специфичные для Windows

При использовании WebGPU на устройствах Windows помните о следующих ограничениях:

  • Chrome не поддерживает одновременное использование нескольких графических адаптеров. См. issue chromium:329211593 .

  • Chrome всегда использует тот же графический адаптер, который был выделен для других рабочих нагрузок Chrome. На ноутбуках это, как правило, интегрированная видеокарта из-за энергопотребления (т.е. энергосбережения). Это означает, что параметр powerPreference не влияет на вызов requestAdapter() . Вы можете принудительно использовать высокопроизводительный графический процессор (если он доступен), включив флаг chrome://flags/#force-high-performance-gpu и перезапустив Chrome.