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

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

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

Атрибут gPUAdapterInfo isFallbackAdapter

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

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

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

Экспериментальная функция "core-features-and-limits" доступная на устройстве GPUDevice, снимает все ограничения режима совместимости (функции и ограничения), если включен флаг chrome://flags/#enable-unsafe-webgpu . См. проблему 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» .

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