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

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

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

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

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

Например, вам может понадобиться создать конвейер, использующий только макеты групп привязки 0 и 2. Вы можете назначить макет группы привязки 1 фрагментным данным, а макет группы привязки 2 — вершинным данным, а затем выполнить рендеринг без фрагментного шейдера. См. issue 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-элементов, таких как пользовательский интерфейс, которые могут выходить за пределы текущей области просмотра. См. issue 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 .

Обновления Dawn

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

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

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

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

Члены subgroupMinSize и subgroupMaxSize добавлены в структуру WGPUAdapterInfo . См. webgpu-headers PR .

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

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

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