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

François Beaufort
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 всегда будет ложным на устройствах пользователей. Мы изучаем возможность прекращения поддержки и удаления атрибута GPUAdapter isFallbackAdapter. Подробнее о намерении реализовать функцию…

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

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

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

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

Как сохранять и копировать изображения на холсте

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

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

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

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

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

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

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

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

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

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

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