Что нового в 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

Теперь получение идентификационной информации об адаптере можно осуществлять синхронно с помощью атрибута info в `GPUAdapter`. Ранее единственным способом получения информации об адаптере был вызов асинхронного метода requestAdapterInfo() в `GPUAdapter`. Однако метод requestAdapterInfo() был удален из спецификации WebGPU и будет удален в Chrome позже в этом году, чтобы дать веб-разработчикам достаточно времени для необходимого перехода. См. следующий пример, статус Chrome и проблему 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 в 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]).

Утренние обновления

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

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

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

Что нового в WebGPU?

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

Хром 144

Хром 143

Хром 142

Хром 141

Хром 140

Хром 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