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

Обновления рассвета

API webgpu.h C больше не предоставляет wgpuSurfaceGetPreferredFormat() , эквивалент C 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» .

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