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

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

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

Расширены возможности поддержки форматов текстур

Новая функция графического процессора «texture-formats-tier1» позволяет разработчикам переносить существующий контент в веб без необходимости переписывать его под более низкие возможности WebGPU. Она поддерживает новые форматы текстур "r16unorm" , "r16snorm" , "rg16unorm" , "rg16snorm" , "rgba16unorm" и "rgba16snorm" с возможностью прикрепления рендера, смешивания, мультисэмплинга и доступом к хранилищу текстур "read-only" » или "write-only" . Она также поддерживает существующие форматы текстур "r8snorm" , "rg8snorm" , "rgba8snorm" с возможностью прикрепления рендера, смешивания, мультисэмплинга и разрешения. Также доступно больше форматов текстур с возможностью доступа к хранилищу текстур "read-only" или "write-only" .

Новая функция графического процессора «texture-formats-tier2» обеспечивает доступ к хранилищу текстур "read-write" для определённых форматов, что критически важно для таких проектов, как портирование Unreal Engine в веб. Обратите внимание, что включение "texture-formats-tier2" при создании устройства автоматически включает "texture-formats-tier1" .

См. следующий фрагмент и запись chromestatus .

const adapter = await navigator.gpu.requestAdapter();

const requiredFeatures = [];
if (adapter.features.has("texture-format-tier1")) {
  requiredFeatures.push("texture-format-tier1");
}
if (adapter.features.has("texture-format-tier2")) {
  requiredFeatures.push("texture-format-tier2");
}
const device = await adapter.requestDevice({ requiredFeatures });

// Later on, when dealing with "r8unorm" texture formats for example...
if (device.features.has("texture-format-tier2")) {
  // Use "read-write" storage texture access...
} else if (device.features.has("texture-format-tier1")) {
  // Use "read-only" or "write-only" storage texture access...
} else {
  // Fallback: Use another texture format...
}

Большое спасибо ребятам из Intel за их работу!

Примитивный индекс в WGSL

primitive_index — это встроенное значение WGSL, которое однозначно идентифицирует текущий примитив (например, точку, линию или треугольник), обрабатываемый фрагментным шейдером. Он начинается с 0, увеличивается на 1 после обработки каждого примитива и сбрасывается до 0 после каждой отрисовки.

Если функция "primitive-index" доступна в GPUAdapter, запросите GPUDevice с этой функцией, чтобы получить поддержку индекса примитивов в WGSL, и явно включите это расширение в коде WGSL с помощью enable primitive_index; После включения используйте встроенное целочисленное значение primitive_index во фрагментном шейдере, например, для доступа к данным каждого примитива или выполнения логики, которая различается для каждой отрисовываемой геометрической фигуры.

В следующем фрагменте кода показан фрагментный шейдер, который отображает второй примитив красным цветом, а все остальные примитивы — синим.

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("primitive-index")) {
  throw new Error("Primitive index support is not available");
}
// Explicitly request primitive index support.
const device = await adapter.requestDevice({
  requiredFeatures: ["primitive-index"],
});

const fragmentShaderModule = device.createShaderModule({ code: `
  enable primitive_index;

  @fragment
  fn main(@builtin(primitive_index) i : u32) -> @location(0) vec4f {
    if (i == 1) {
      return vec4f(1, 0, 0, 1);
    }
    return vec4f(0, 1, 0, 1);
  }`,
});
// Send the appropriate commands to the GPU...

Узнайте больше, изучив пример Primitive Picking и прочитав запись chromestatus .

Треугольники трехмерной модели чайника окрашены в зависимости от значений их примитивных индексов.
Образец Primitive Picking в режиме «примитивных индексов».

Обновления Dawn

Переменная CMake DAWN_BUILD_MONOLITHIC_LIBRARY , используемая для управления типом монолитной библиотеки для сборки, изменила свое значение по умолчанию с OFF на STATIC , так что по умолчанию будут создаваться файлы libwebgpu* .

Dawn теперь корректно обрабатывает значение по умолчанию wgpu::PresentMode::Undefined при настройке wgpu::Surface . См. проблему 441410668 .

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

Что нового в WebGPU

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

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