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

François Beaufort
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...

Чтобы узнать больше, ознакомьтесь с примером выбора примитивов и записью в chromestatus.

Треугольники 3D-модели чайника окрашены в соответствии с их значениями индекса примитива.
Пример выбора примитивов в режиме "индексы примитивов".

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

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

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

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

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