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

François Beaufort
François Beaufort

Как увеличить лимит maxTextureArrayLayers

Максимальное допустимое значение глубины или количества слоев двумерной текстуры по умолчанию – 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. Подробнее о проблеме 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…

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

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

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