Что нового в 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-элементов, таких как пользовательский интерфейс, которые могут выходить за пределы текущей области просмотра. См. 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 .

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

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

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