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

François Beaufort
François Beaufort

В этом выпуске не так много функций WebGPU, но в ближайшее время мы добавим много нового. В следующих выпусках будут добавлены такие функции, как DP4a, текстуры хранилища только для чтения и чтения-записи, отдельный контроль аспектов трафарета и глубины, рендеринг в срезы 3D-текстур и улучшения компиляции шейдеров.

А пока узнайте, как ускорить тестирование веб-моделей ИИ с помощью поддержки WebGPU и WebGL в Headless Chrome и почему WebGPU может быть отключена или не работать в Chrome.

Расширение охвата с помощью режима совместимости (функция в разработке)

WebGPU хорошо совместим с современными графическими API (Vulkan, Metal и D3D12), но некоторые устройства их не поддерживают. Это ограничивает доступность WebGPU, особенно на таких платформах, как Windows (31% пользователей Chrome не имеют D3D11.1+), Android (23% не имеют Vulkan 1.1+) и ChromeOS (где Vulkan становится все более популярным).

Команда Chrome работает над режимом совместимости в WebGPU, чтобы решить эту проблему. Он будет представлять собой немного ограниченную версию WebGPU, которая работает со старыми API, такими как D3D11 и OpenGL ES. Это позволит расширить потенциальную базу пользователей WebGPU.

Важно отметить, что приложения, использующие режим совместимости, остаются полностью действительными приложениями WebGPU. Устройства без поддержки режима совместимости будут автоматически переключаться на основной адаптер WebGPU, что обеспечит широкую доступность.

Диаграмма режима совместимости WebGPU.
Расширение охвата режима совместимости WebGPU

Если у вас возникли вопросы, ознакомьтесь с предложением и комментарием.

Как увеличить лимит maxVertexAttributes

Максимальное количество атрибутов в буферах при создании GPURenderPipeline по умолчанию равно 16. Теперь можно запросить до 30 атрибутов, используя ограничение maxVertexAttributes, если оно поддерживается. Ознакомьтесь с примером ниже и проблемой dawn:2223.

const adapter = await navigator.gpu.requestAdapter();

if (adapter.limits.maxVertexAttributes < 30) {
  // When the desired limit isn't supported, take action to either fall back to
  // a code path that does not require the higher limit or notify the user that
  // their device does not meet minimum requirements.
}

// Request highest limit of max vertex attributes.
const device = await adapter.requestDevice({
  requiredLimits: { maxVertexAttributes: 30 },
});

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

Добавлен новый переключатель экземпляра expose_wgsl_experimental_features, чтобы экземпляр предоставлял доступ только к экспериментальным функциям WGSL, но не к небезопасным. Это позволит использовать безопасные экспериментальные функции WGSL без необходимости включать переключатель allow_unsafe_apis. Подробнее о проблеме dawn:2260…

Недавно в привязках Dawn для Node.js были реализованы следующие улучшения:

  • Добавлено: GPUSupportedFeatures::getSize().
  • Реализовано устаревание GPUAdapter.
  • GPUInternalError теперь правильно регистрируется на устройствах.
  • Атрибуты теперь можно перечислять.

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

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