В этом документе объясняется, почему 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 .
Адаптер графического процессора имеет значение null
Ниже приведен пример ошибки 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 в Headless Chrome .Аппаратное обеспечение графического процессора было специально занесено в черный список. Если вы видите сообщение «WebGPU отключен через черный список или командную строку» в
chrome://gpu
, вы можете отключить черный список адаптеров WebGPU, включив флагchrome://flags/#enable-unsafe-webgpu
и перезапустив Chrome.Для параметров, переданных в
requestAdapter()
, не существует соответствующего адаптера графического процессора. Попробуйте вызватьrequestAdapter()
с разными параметрами .Для WebGPU требуется графический процессор (аппаратный или программно-эмулируемый). Вы можете проверить, обнаруживает ли Chrome графический процессор, посетив
chrome://gpu
.
WebGPU медленнее, чем WebGL
Откройте
chrome://gpu
и убедитесь, что вы можете прочитать «WebGPU: аппаратное ускорение». Если вы прочитали «WebGPU: только программное обеспечение, аппаратное ускорение недоступно», возможно, вам необходимо обновить драйверы графического процессора.Непосредственный перевод концепций WebGL в WebGPU может не полностью использовать преимущества уникальных оптимизаций WebGPU. Ознакомьтесь с разделом «От WebGL к WebGPU» , чтобы узнать о некоторых их различиях.
Ограничения, специфичные для Windows
Помните о следующих ограничениях при использовании WebGPU на устройствах Windows:
Chrome не поддерживает одновременное использование нескольких адаптеров графического процессора. См. выпуск chromium:329211593 .
Chrome всегда использует тот же адаптер графического процессора, который был выделен для других рабочих нагрузок Chrome, которым для ноутбуков обычно является встроенная видеокарта из-за аспекта энергопотребления (т. е. энергосбережения). Это означает, что опция
powerPreference
не оказывает никакого влияния при вызовеrequestAdapter()
.