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

Франсуа Бофор
François Beaufort

Опубликовано: 26 марта 2025 г.

Разрешить создание макета конвейера с макетом группы привязки пустого значения

Ранее для создания пустого макета группы привязки требовалось добавить группу привязки с нулевым количеством привязок, что было неудобно. Теперь это не требуется, поскольку допускаются пустые макеты групп привязки, которые игнорируются при создании макета конвейера. Это должно упростить разработку.

Например, вы можете захотеть создать конвейер, использующий только макеты групп привязки 0 и 2. Вы можете назначить макет группы привязки 1 данным фрагмента, а макет группы привязки 2 — данным вершин, а затем выполнить рендеринг без фрагментного шейдера. См. проблему 377836524 .

const bgl0 = myDevice.createBindGroupLayout({ entries: myGlobalEntries });
const bgl1 = myDevice.createBindGroupLayout({ entries: myFragmentEntries });
const bgl2 = myDevice.createBindGroupLayout({ entries: myVertexEntries });

// Create a pipeline layout that will be used to render without a fragment shader.
const myPipelineLayout = myDevice.createPipelineLayout({
  bindGroupLayouts: [bgl0, null, bgl2],
});

Разрешите области просмотра выходить за пределы границ целевых областей рендеринга.

Требования к проверке области просмотра были смягчены, чтобы разрешить выход областей просмотра за пределы целевой области рендеринга. Это особенно полезно для отрисовки 2D-элементов, таких как элементы пользовательского интерфейса, которые могут выходить за пределы текущей области просмотра. См. проблему 390162929 .

const passEncoder = myCommandEncoder.beginRenderPass({
  colorAttachments: [
    {
      view: myColorTexture.createView(),
      loadOp: "clear",
      storeOp: "store",
    },
  ],
});

// Set a viewport that extends past the render target's bounds by 8 pixels
// in all directions.
passEncoder.setViewport(
  /*x=*/ -8,
  /*y=*/ -8,
  /*width=*/ myColorTexture.width + 16,
  /*height=*/ myColorTexture.height + 16,
  /*minDepth=*/ 0,
  /*maxDepth=*/ 1,
);

// Draw geometry and complete the render pass as usual.

Упрощенный доступ к экспериментальному режиму совместимости на Android.

Теперь флаг chrome://flags/#enable-unsafe-webgpu сам по себе включает все возможности, необходимые для экспериментального режима совместимости WebGPU на Android. Благодаря этому вы можете запросить GPUAdapter в режиме совместимости с опцией featureLevel: "compatibility" и даже получить доступ к бэкенду OpenGL ES на устройствах, не поддерживающих Vulkan. См. следующий пример и проблему dawn:389876644 .

// Request a GPUAdapter in compatibility mode.
const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });
На странице отчета WebGPU отображается GPUAdapter в режиме совместимости на устройстве Android.
Информация об адаптере режима совместимости доступна на сайте webgpureport.org .

Удалите ограничение maxInterStageShaderComponents.

Как было объявлено ранее , ограничение maxInterStageShaderComponents снято по ряду причин:

  • Избыточность с maxInterStageShaderVariables : это ограничение уже выполняет аналогичную функцию, контролируя объем данных, передаваемых между этапами шейдера.
  • Незначительные расхождения: Хотя существуют небольшие различия в способе расчета двух ограничений, эти различия незначительны и могут быть эффективно устранены в рамках ограничения maxInterStageShaderVariables .
  • Упрощение: Удаление maxInterStageShaderComponents упрощает интерфейс шейдера и снижает сложность для разработчиков. Вместо управления двумя отдельными ограничениями с незначительными различиями, они могут сосредоточиться на более подходящем и всеобъемлющем параметре maxInterStageShaderVariables .

См. намерение удалить и выдать документ № 364338810 .

Утренние обновления

Использование фильтрующего сэмплера для выборки текстуры глубины больше невозможно. Напоминаем, что текстуру глубины можно использовать только с нефильтрующим или сравнительным сэмплером. См. проблему 379788112 .

Структуры WGPURequiredLimits и WGPUSupportedLimits были преобразованы в структуру WGPULimits . См. проблему 374263404 .

Следующие структуры были переименованы. См. проблему 42240793 .

  • WGPUImageCopyBuffer теперь называется WGPUTexelCopyBufferInfo
  • WGPUImageCopyTexture теперь называется WGPUTexelCopyTextureInfo
  • Теперь WGPUTextureDataLayout называется WGPUTexelCopyBufferLayout

В структуру WGPUAdapterInfo добавлены члены subgroupMinSize и subgroupMaxSize . См. запрос на слияние webgpu-headers .

Теперь отслеживание использования API Dawn в Metal возможно при запуске программы с переменной среды DAWN_TRACE_FILE_BASE , которая сохраняет файл .gputrace, который можно загрузить позже в отладчик Metal в Xcode. См. документацию по отладке Dawn .

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

Что нового в WebGPU?

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

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