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

François Beaufort
François Beaufort

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

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

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

Например, вы можете создать конвейер, в котором используются только макеты группы привязки 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.

Участники subgroupMinSize и subgroupMaxSize добавлены в структуру WGPUAdapterInfo. Подробнее о запросе на добавление заголовков WebGPU…

Теперь можно отслеживать использование Dawn API в Metal, запустив программу с переменной среды DAWN_TRACE_FILE_BASE, которая сохраняет файл .gputrace. Его можно загрузить в отладчик Metal в XCode. Подробнее о том, как отлаживать Dawn…

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

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