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

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

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

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

Создание конвейера рендеринга включает преобразование WGSL в SPIR-V с помощью компилятора Tint, а затем в ISA с помощью компилятора драйверов.
Создание конвейера рендеринга в 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 .

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

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

Что нового в WebGPU

Список всего, что было описано в серии «Что нового в WebGPU» .

Хром 130

Хром 129

Хром 128

Хром 127

Хром 126

Хром 125

Хром 124

Хром 123

Хром 122

Хром 121

Хром 120

Хром 119

Хром 118

Хром 117

Хром 116

Хром 115

Хром 114

Хром 113