Что нового в 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. Мы изучаем возможность отмены и удаления атрибута isFallbackAdapter в GPUAdapter. См. информацию о намерении поставлять .

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

Команда Chrome продолжает совершенствовать Tint, компилятор языка шейдеров WebGPU, добавляя промежуточное представление (IR) для устройств с поддержкой WebGPU с бэкендом D3D12. Это IR, расположенное между абстрактным синтаксическим деревом (AST) Tint и бэкендом 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 . См. проблему 395855517 .

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

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

Обновления Dawn

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

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

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

Что нового в WebGPU

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

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