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

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

Увеличить лимит maxTextureArrayLayers

Максимально допустимое значение для глубины или количества слоев 2D-текстуры по умолчанию составляет 256. Теперь можно запросить до 2048, используя ограничение maxTextureArrayLayers , если оно поддерживается. См. следующий пример и проблему 42241514 .

const adapter = await navigator.gpu.requestAdapter();
if (adapter.limits.maxTextureArrayLayers < 30) {
  // When the desired limit isn't supported, take action to either fall back to
  // a code path that does not require the higher limit or notify the user that
  // their device does not meet minimum requirements.
}

// Request highest limit of max texture array layers attributes.
const device = await adapter.requestDevice({
  requiredLimits: { maxTextureArrayLayers: 2048 }
});

Оптимизация загрузки буфера для бэкэнда Vulkan

Теперь доступен быстрый путь при вызове метода writeBuffer() бэкенда GPUQueue для Vulkan. Теперь данные могут быть записаны непосредственно в целевой буфер, что устраняет необходимость в дополнительном копировании и синхронизации. Эта оптимизация уменьшает трафик памяти, необходимый для загрузки данных в GPU.

Оптимизация быстрого пути требует, чтобы память буфера была видна хосту и не имела никаких ожидающих операций GPU на ней. См. проблему 42242084 .

Улучшения времени компиляции шейдера

Команда Chrome повышает эффективность Tint , компилятора языка шейдеров WebGPU. В настоящее время Tint несколько раз изменяет абстрактное синтаксическое дерево (AST) кода шейдера перед генерацией машинного кода, что является ресурсоемким процессом на некоторых платформах. Для оптимизации этого вводится новое промежуточное представление (IR) вместе с переработанными бэкэндами, которые его используют. Это изменение направлено на ускорение компиляции шейдера.

Создание конвейера рендеринга включает преобразование WGSL в SPIR-V с помощью компилятора Tint, а затем в ISA с помощью компилятора Driver.
Создание конвейера рендеринга в ChromeOS.

Эти улучшения, уже доступные на Android, постепенно расширяются на устройства ChromeOS, которые поддерживают WebGPU с бэкэндом Vulkan. См. issue 42250751 .

Отправленные буферы команд должны быть уникальными.

Каждый GPUCommandBuffer, отправленный в GPUQueue с помощью метода submit() должен быть уникальным, в противном случае генерируется ошибка проверки. Это была ошибка спецификации . См. проблему 42241492 .

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

const commandEncoder = device.createCommandEncoder();
const commandBuffer = commandEncoder.finish();

device.queue.submit([commandBuffer, commandBuffer]);
// ⚠️ Validation fails because command buffers are not unique.

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

Обертка C++ webgpu_cpp.h теперь является только заголовочной, что упрощает ее использование и позволяет легче интегрировать с альтернативными обертками C++. См. проблему 40195122 .

API webgpu.h C больше не раскрывает понятие объектов Swapchain. Это изменение должно тесно соответствовать API JavaScript. Внутренняя конфигурация теперь выполняется с помощью метода Configure() нового объекта wgpu::Surface , который может быть изменен в будущем. Ознакомьтесь с примером в документации Build an app with WebGPU . См. issue 42241264 .

Ознакомьтесь с исчерпывающим списком коммитов .

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