Опубликовано: 7 февраля 2024 г., Последнее обновление: 17 октября 2025 г.
В этом документе объясняется, почему WebGPU может быть неработоспособен или работать не так, как ожидалось в браузере Chrome, а также приводятся четкие шаги по решению проблем, если это возможно.
navigator.gpu не определен
В следующем примере показана ошибка JavaScript, которая может возникнуть, если gpu
недоступен в navigator
:
const adapter = await navigator.gpu.requestAdapter();
cancel Uncaught TypeError: Cannot read properties of undefined (reading 'requestAdapter')
Это может быть связано с одной из следующих причин. Проверьте их в указанном порядке:
Для работы WebGPU требуется Chrome 113 или более поздней версии на ChromeOS, macOS, Windows и Chrome 121 или более поздней версии на Android. Проверьте свою версию на
chrome://version
и при необходимости обновите её.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)
Это происходит по одной из следующих причин. Ознакомьтесь с ними в указанном порядке:
WebGPU отключается, если пользователь отключил параметр «Использовать графическое ускорение (при наличии)» в
chrome://settings/system
. Проверьте, отключена ли эта настройка, и включите её снова.WebGPU пока не поддерживается на этой платформе. Вы можете включить флаг
chrome://flags/#enable-unsafe-webgpu
и перезапустить Chrome. Для экспериментальной поддержки в Linux также необходимо включить флагchrome://flags/#enable-vulkan
. Подробнее см. в статье о поддержке WebGPU в Chrome без заголовка .Аппаратное обеспечение графического процессора (GPU) специально занесено в список заблокированных устройств. Если на
chrome://gpu
отображается сообщение «WebGPU отключен через список заблокированных устройств или командную строку», вы можете отключить список заблокированных устройств WebGPU, включив флагchrome://flags/#enable-unsafe-webgpu
и перезапустив Chrome. Вы также можете переопределить список встроенного программного рендеринга, включив флагchrome://flags/#ignore-gpu-blocklist
и перезапустив Chrome.Для параметров, переданных в
requestAdapter()
, не существует соответствующего графического адаптера. Попробуйте вызватьrequestAdapter()
с другими параметрами .Для WebGPU требуется графический процессор (аппаратный или с программной эмуляцией). Проверить, обнаруживает ли Chrome графический процессор, можно на сайте
chrome://gpu
.Процесс графического процессора несколько раз аварийно завершался. Вы можете перезагрузить страницу или перезапустить Chrome. Подробнее см. в рекомендациях по устранению потери данных с WebGPU.
WebGPU медленнее, чем WebGL
Откройте
chrome://gpu
и убедитесь, что вы видите надпись «WebGPU: Аппаратное ускорение». Если вы видите надпись «WebGPU: Только программное обеспечение, аппаратное ускорение недоступно», возможно, вам необходимо обновить драйверы видеокарты.Прямая реализация концепций 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.