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

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

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

Атрибут gPUAdapterInfo isFallbackAdapter

The GPUAdapterInfo isFallbackAdapter boolean attribute indicates whether a GPUAdapter has significant performance limitations in exchange for wider compatibility, more predictable behavior, or improved privacy. This addition was necessary because libraries that take user-provided GPUDevice objects couldn't access this information through the adapterInfo attribute on GPUDevice. See the following example and issue 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 на устройствах пользователей. Мы изучаем возможность устаревания и удаления атрибута isFallbackAdapter для GPUAdapter. См. план внедрения .

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

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

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

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

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

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

Он
Пользователь выбрал пункт "Сохранить изображение как…" в контекстном меню.

Ограничения режима совместимости лифта

The experimental "core-features-and-limits" feature when available on a GPUDevice, lifts all compatibility mode restrictions (features and limits) when the chrome://flags/#enable-unsafe-webgpu flag is enabled. See issue 395855517 .

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

Адаптеры, использующие функцию "core-features-and-limits" по умолчанию, всегда поддерживают эту функцию, и она автоматически включается на созданных на их основе графических устройствах. Для адаптеров, использующих "core-features-and-limits" по умолчанию, эта функция может поддерживаться и может быть запрошена на созданных на их основе графических устройствах. Оба типа адаптеров также могут поддерживать такие функции, как "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" . См. проблему 395855516 .

Утренние обновления

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

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

Здесь описаны лишь некоторые из ключевых моментов. Ознакомьтесь с полным списком изменений .

Что нового в WebGPU?

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

Хром 149-150

Хром 147-148

Хром 146

Хром 145

Хром 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