Что нового в 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 for Vulkan доступен быстрый способ записи данных. Теперь данные могут записываться непосредственно в целевой буфер, что исключает необходимость дополнительного копирования и синхронизации. Эта оптимизация уменьшает объем памяти, необходимый для загрузки данных на графический процессор.

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

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

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

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

Эти улучшения, уже доступные на Android, постепенно распространяются на устройства ChromeOS, поддерживающие WebGPU с бэкэндом Vulkan. См. проблему 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 .

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

Ознакомьтесь с полным списком коммитов .

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