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

Хром 126

Хром 125

Хром 124

Хром 123

Хром 122

Хром 121

Хром 120

Хром 119

Хром 118

Хром 117

Хром 116

Хром 115

Хром 114

Хром 113