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

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

Опубликовано: 23 апреля 2025 г.

GPUAdapterInfo — атрибут FallbackAdapter

Булев атрибут GPUAdapterInfo isFallbackAdapter указывает, имеет ли GPUAdapter существенные ограничения производительности в обмен на более широкую совместимость, более предсказуемое поведение или улучшенную конфиденциальность. Это добавление было необходимо, поскольку библиотеки, которые принимают предоставленные пользователем объекты GPUDevice, не могли получить доступ к этой информации через атрибут adapterInfo на GPUDevice. См. следующий пример и проблему 403172841 .

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

if (adapter?.info.isFallbackAdapter) {
  // The returned adapter is a software-backed fallback adapter, which
  // may have significantly lower performance and fewer features.
}

Поскольку Chrome еще не предоставил поддержку резервных адаптеров, isFallbackAdapter на данный момент всегда имеет значение false на устройствах пользователей. Мы изучаем, можно ли сделать атрибут GPUAdapter isFallbackAdapter устаревшим и удалить. См. Intent to Ship .

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

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

Блок-схема показывает процесс преобразования кода шейдера WGSL в низкоуровневые инструкции графического процессора.
Создание конвейера рендеринга в Windows.

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

Сохраняйте и копируйте изображения холста

Пользователи Chrome теперь могут щелкнуть правой кнопкой мыши по холсту WebGPU и получить доступ к параметрам контекстного меню Сохранить изображение как… или Копировать изображение . См. проблему 40902474 .

The
Пользователь выбрал контекстное меню «Сохранить изображение как…».

Снять ограничения режима совместимости

Экспериментальная функция "core-features-and-limits" , доступная на GPUDevice, снимает все ограничения режима совместимости (функции и ограничения), если включен флаг chrome://flags/#enable-unsafe-webgpu . См. issue 395855517 .

Запрос GPUAdapter с опцией featureLevel: "compatibility" намекает браузеру на необходимость выбора экспериментального режима совместимости WebGPU . В случае успеха результирующий адаптер становится "compatibility-defaulting". В противном случае он становится "core-defaulting", что равнозначно использованию опции featureLevel: "core" . Более того, вызов requestDevice() без requiredFeatures и requiredLimits запрашивает GPUDevice с возможностями GPUAdapter по умолчанию.

Адаптеры Core-defaulting всегда поддерживают функцию "core-features-and-limits" , и она автоматически включается на GPUDevices, созданных из них. Для адаптеров Compatibility-defaulting функция "core-features-and-limits" может поддерживаться и может быть запрошена на GPUDevices, созданных из них. Оба типа адаптеров также могут поддерживать функции, такие как "float32-blendable" , которая является необязательной как в режиме ядра, так и в режиме совместимости.

Следующий пример относится к приложению, которому требуется "float32-blendable" и которое поддерживает использование основных функций, если они доступны, но использует только функции совместимости, если основные функции недоступны.

const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });

if (!adapter || !adapter.features.has("float32-blendable")) {
  throw new Error("32-bit float textures blending support is not available");
}

const requiredFeatures = [];
if (adapter.features.has("core-features-and-limits")) {
  requiredFeatures.push("core-features-and-limits");
}

const device = await adapter.requestDevice({ requiredFeatures });

if (!device.features.has("core-features-and-limits")) {
  // Compatibility mode restrictions validation rules will apply.
}

Экспериментальные атрибуты GPUAdapter featureLevel и isCompatibilityMode были удалены в пользу функции "core-features-and-limits" . См . issue 395855516 .

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

Перечисление статуса обратного вызова InstanceDropped было переименовано в CallbackCancelled , чтобы прояснить, что обратный вызов был отменен, но фоновая обработка, связанная с событием, например компиляция конвейера, может все еще выполняться. Новое имя более применимо в общем случае, если позже будет добавлен другой механизм отмены. См. issue 520 .

Перечисление wgpu::PopErrorScopeStatus::EmptyStack , указывающее, что стек области ошибок не может быть извлечен, было переименовано в wgpu::PopErrorScopeStatus::Error (что также применимо более широко). Обратный вызов теперь также включает соответствующее сообщение с пояснением ошибки для облегчения отладки. См. проблему 369 .

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

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