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

François Beaufort
François Beaufort

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

Теперь при запросе экспериментального режима совместимости WebGPU в Chrome для Android можно получить GPUAdapter от серверной части OpenGL ES. Это особенно полезно для устройств 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.

Атрибут info для GPUAdapter

Получить идентифицирующую информацию об адаптере теперь можно синхронно с помощью атрибута GPUAdapter info. Раньше получить информацию об адаптере можно было только с помощью асинхронного метода 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(), source data в writeBuffer() и source 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]).

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

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

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

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

Что нового в WebGPU

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

Chrome 155–156

Chrome 153–154

Chrome 151–152

Chrome 149–150

Chrome 147–148

Chrome 146

Chrome 145

Chrome 144

Chrome 143

Chrome 142

Chrome 141

Chrome 140

Chrome 139

Chrome 138

Chrome 137

Chrome 136

Chrome 135

Chrome 134

Chrome 133

Chrome 132

Chrome 131

Chrome 130

Chrome 129

Chrome 128

Chrome 127

Chrome 126

Chrome 125

Chrome 124

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119

Chrome 118

Chrome 117

Chrome 116

Chrome 115

Chrome 114

Chrome 113