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

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

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

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

Что нового в WebGPU

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

Хром 135

Хром 134

Хром 133

Хром 132

Хром 131

Хром 130

Хром 129

Хром 128

Хром 127

Хром 126

Хром 125

Хром 124

Хром 123

Хром 122

Хром 121

Хром 120

Хром 119

Хром 118

Хром 117

Хром 116

Хром 115

Хром 114

Хром 113