Что нового в WebGPU (Chrome 127)

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

Экспериментальная поддержка OpenGL ES на Android

Теперь вы можете получить доступ к GPUAdapter из бэкенда OpenGL ES при запросе экспериментального режима совместимости с WebGPU в Chrome для Android. Это особенно полезно для устройств Android, не поддерживающих Vulkan 1.1 и более поздние версии. См. следующий пример и ошибку dawn:1545 .

// Request a GPUAdapter in compatibility mode
const adapter = await navigator.gpu.requestAdapter({ compatibilityMode: true });
Страница отчета WebGPU показывает информацию GPUAdapter из бэкэнда OpenGL ES на устройстве Android.
Информация об адаптере OpenGL ES на сайте webgpureport.org

Поскольку эта функция все еще находится на экспериментальной стадии, вам необходимо выполнить следующие шаги:

  1. Включите следующие флаги Chrome: «Поддержка небезопасного WebGPU», «Функции разработчика WebGPU» и «Включить командную строку на устройствах без прав root».
  2. Включите отладку по USB на вашем Android-устройстве.
  3. Подключите Android-устройство к рабочей станции, выполните adb shell 'echo "_ --use-webgpu-adapter=opengles" > /data/local/tmp/chrome-command-line' чтобы указать предпочтение OpenGL ES вместо Vulkan, и перезапустите Chrome.

Атрибут информации GPUAdapter

Получение идентификационной информации об адаптере теперь можно осуществлять синхронно с помощью атрибута GPUAdapter info . Ранее единственным способом получить информацию об адаптере был вызов асинхронного метода GPUAdapter requestAdapterInfo() . Однако метод requestAdapterInfo() был удалён из спецификации WebGPU и будет удалён в Chrome в конце этого года, чтобы дать веб-разработчикам достаточно времени для необходимого перехода. См. следующий пример: Chrome Status и issue 335383516 .

const adapter = await navigator.gpu.requestAdapter();
const info = adapter.info;

// During the transition period, you can use the following:
// const info = adapter.info || await adapter.requestAdapterInfo();

console.log(`Vendor: ${info.vendor}`); // "arm"
console.log(`Architecture: ${info.architecture}`); // "valhall"

Улучшения взаимодействия с WebAssembly

Для обеспечения возможности передачи куч WebAssembly напрямую в WebGPU размеры следующих аргументов BufferSource больше не ограничены 2 ГБ: dynamicOffsetsData в setBindGroup() , исходные data в writeBuffer() и исходные data Pin writeTexture() . См. проблему 339049388 .

Улучшены ошибки кодировщика команд

Некоторые ошибки валидации, возникающие при кодировании команд, теперь будут содержать улучшенную контекстную информацию. Например, попытка запустить вычислительный проход, когда проход рендеринга был ещё открыт, приводила к следующей ошибке.

Command cannot be recorded while [CommandEncoder (unlabeled)] is locked and [RenderPassEncoder (unlabeled)] is currently open.
    at CheckCurrentEncoder (..\..\third_party\dawn\src\dawn\native\EncodingContext.h:106)

Это описывает причину ошибки, но не указывает, какой именно вызов фактически вызвал ошибку проверки. В следующем сообщении об ошибке показано улучшенное сообщение, включающее команду, вызвавшую ошибку. См. изменение 192245 .

Command cannot be recorded while [CommandEncoder (unlabeled)] is locked and [RenderPassEncoder (unlabeled)] is currently open.
 - While encoding [CommandEncoder (unlabeled)].BeginComputePass([ComputePassDescriptor]).

Обновления Dawn

API webgpu.h на языке C больше не предоставляет функцию wgpuSurfaceGetPreferredFormat() , эквивалентную функции wgpu::Surface::GetPreferredFormat() в Dawn на языке C. Вместо этого используйте wgpu::Surface::GetCapabilities() для получения списка поддерживаемых форматов, а затем используйте formats[0] для получения предпочтительного формата текстуры для этой поверхности. В то же время, вызов функции wgpu::Surface::GetPreferredFormat() выдаёт предупреждение об устаревании. См. проблему 290 .

Поддерживаемые типы использования текстур поверхности теперь доступны через wgpu::SurfaceCapabilities::usages при вызове wgpu::Surface::GetCapabilities() . Ожидается, что они всегда будут включать wgpu::TextureUsage::RenderAttachment . См. проблему 301 .

Здесь рассматриваются лишь некоторые из ключевых моментов. Ознакомьтесь с полным списком коммитов .

Что нового в WebGPU

Список всего, что было рассмотрено в серии « Что нового в WebGPU» .

Хром 139

Хром 138

Хром 137

Хром 136

Хром 135

Хром 134

Хром 133

Хром 132

Хром 131

Хром 130

Хром 129

Хром 128

Хром 127

Хром 126

Хром 125

Хром 124

Хром 123

Хром 122

Хром 121

Хром 120

Хром 119

Хром 118

Хром 117

Хром 116

Хром 115

Хром 114

Хром 113