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

The Chrome team keeps improving Tint, the WebGPU shader language compiler, by adding an intermediate representation (IR) for devices that support WebGPU with the D3D12 backend. This IR, positioned between Tint's abstract syntax tree (AST) and the HLSL backend writer, will make the compiler more efficient and maintainable, ultimately benefiting both developers and users. Initial tests show that the new version of Tint is up to 10 times faster when translating Unity's WGSL shaders to HLSL.

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

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

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

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

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

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

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

Requesting a GPUAdapter with the featureLevel: "compatibility" option hints the browser to select the experimental WebGPU compatibility mode . If successful, the resulting adapter is "compatibility-defaulting". Otherwise, it is "core-defaulting", which is the same as using the featureLevel: "core" option. Moreover, calling requestDevice() without requiredFeatures and requiredLimits request a GPUDevice with the GPUAdapter's default capabilities.

Core-defaulting adapters always support the "core-features-and-limits" feature and it is automatically enabled on GPUDevices created from them. For compatibility-defaulting adapters, the "core-features-and-limits" feature may be supported and can be requested on GPUDevices created from them. Both types of adapters may also support features like "float32-blendable" , which is optional in both core and compatibility modes.

Следующий пример относится к приложению, которое требует поддержки "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» .

Хром 151-152

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

,

Франсуа Бофор
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

The Chrome team keeps improving Tint, the WebGPU shader language compiler, by adding an intermediate representation (IR) for devices that support WebGPU with the D3D12 backend. This IR, positioned between Tint's abstract syntax tree (AST) and the HLSL backend writer, will make the compiler more efficient and maintainable, ultimately benefiting both developers and users. Initial tests show that the new version of Tint is up to 10 times faster when translating Unity's WGSL shaders to HLSL.

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

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

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

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

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

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

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

Requesting a GPUAdapter with the featureLevel: "compatibility" option hints the browser to select the experimental WebGPU compatibility mode . If successful, the resulting adapter is "compatibility-defaulting". Otherwise, it is "core-defaulting", which is the same as using the featureLevel: "core" option. Moreover, calling requestDevice() without requiredFeatures and requiredLimits request a GPUDevice with the GPUAdapter's default capabilities.

Core-defaulting adapters always support the "core-features-and-limits" feature and it is automatically enabled on GPUDevices created from them. For compatibility-defaulting adapters, the "core-features-and-limits" feature may be supported and can be requested on GPUDevices created from them. Both types of adapters may also support features like "float32-blendable" , which is optional in both core and compatibility modes.

Следующий пример относится к приложению, которое требует поддержки "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» .

Хром 151-152

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