Что нового в 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» и «Включить командную строку на нерутированных устройствах».
  2. Включите отладку по USB на вашем устройстве Android.
  3. Подключите устройство Android к рабочей станции, запустите adb shell 'echo "_ --use-webgpu-adapter=opengles" > /data/local/tmp/chrome-command-line' чтобы предпочесть серверную часть OpenGL ES Vulkan, и перезапустите. Хром.

Информационный атрибут GPUAdapter

Получение идентифицирующей информации об адаптере теперь можно выполнить синхронно с помощью info атрибута GPUAdapter. Раньше вызов асинхронного метода GPUAdapter requestAdapterInfo() был единственным способом получить информацию об адаптере. Однако 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 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 C webgpu.h больше не предоставляет 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» .

Хром 131

Хром 130

Хром 129

Хром 128

Хром 127

Хром 126

Хром 125

Хром 124

Хром 123

Хром 122

Хром 121

Хром 120

Хром 119

Хром 118

Хром 117

Хром 116

Хром 115

Хром 114

Хром 113