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

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

Хром 131

Хром 130

Хром 129

Хром 128

Хром 127

Хром 126

Хром 125

Хром 124

Хром 123

Хром 122

Хром 121

Хром 120

Хром 119

Хром 118

Хром 117

Хром 116

Хром 115

Хром 114

Хром 113