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

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

Опубликовано: 7 января 2026 г.

Расширение WGSL subgroup_id

Расширение языка WGSL subgroup_id позволяет использовать следующие новые встроенные значения в рабочих группах, если включено расширение subgroups :

  • subgroup_id : Предоставляет идентификатор подгруппы вызова в текущей рабочей группе.
  • num_subgroups : Сообщает количество подгрупп, присутствующих в рабочей группе.

Ранее для индексирования памяти с использованием идентификаторов вызовов подгрупп приходилось восстанавливать идентификатор подгруппы (обычно с помощью атомарных операций ), чтобы избежать перекрывающихся обращений к памяти. Теперь вы можете использовать subgroup_id для заполнения второй половины этого уравнения. Поскольку эта функциональность пока недоступна в бэкенде D3D, она эмулируется там. Можно безопасно создать эквивалент local_invocation_index как subgroup_invocation_id + subgroup_size * subgroup_id . Обратите внимание, что могут быть случаи, когда подгруппы не заполнены.

Это расширение языка можно определить по функционалу с помощью navigator.gpu.wgslLanguageFeatures . Рекомендуется использовать директиву requires для обозначения потенциальной непереносимости с помощью requires subgroup_id; в верхней части кода шейдера WGSL. См. следующий пример и намерение выпустить .

if (!navigator.gpu.wgslLanguageFeatures.has("subgroup_id")) {
  throw new Error(`WGSL subgroup_id and num_subgroups built-in values are not available`);
}

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("subgroups")) {
  throw new Error("Subgroups support is not available");
}
const device = await adapter.requestDevice({ requiredFeatures: ["subgroups"] });

const shaderModule = device.createShaderModule({ code: `
  enable subgroups;
  requires subgroup_id;

  @compute @workgroup_size(64, 1, 1)
  fn main(@builtin(subgroup_id) subgroup_id : u32,
          @builtin(num_subgroups) num_subgroups : u32) {
    // TODO: Use subgroup_id and num_subgroups values.
  }`,
});

Расширение WGSL uniform_buffer_standard_layout

Расширение языка WGSL uniform_buffer_standard_layout позволяет буферам uniform использовать те же ограничения по размещению в памяти, что и буферы хранения, что упрощает совместное использование структур данных в обоих типах буферов. Это означает, что буферам uniform больше не требуется выравнивание элементов массива по 16 байтам или дополнение смещений вложенных структур до кратного 16 байтам.

Это расширение языка можно определить по функционалу с помощью navigator.gpu.wgslLanguageFeatures . Рекомендуется использовать директиву requires для обозначения потенциальной непереносимости с помощью requires uniform_buffer_standard_layout; в верхней части кода шейдера WGSL. См. следующий пример и намерение выпустить .

if (!navigator.gpu.wgslLanguageFeatures.has("uniform_buffer_standard_layout")) {
  throw new Error(`WGSL uniform buffer standard layout is not available`);
}

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

const shaderModule = device.createShaderModule({ code: `
  requires uniform_buffer_standard_layout;

  struct S {
      x: f32
  }
  struct Uniforms {
      a: S,
      b: f32
      // b is at offset 4. Without standard layout, alignment rules would
      // force b to be at offset 16 (or a multiple of 16), and you would have
      // to add extra fields or use an @align attribute.
  }

  @group(0) @binding(0) var<uniform> u: Uniforms;

  @fragment fn fs_main() -> @location(0) vec4<f32> {
      return vec4<f32>(u.a.x);
  }`,
});

WebGPU на Linux

Команда Chrome постепенно внедряет WebGPU для Linux, начиная с поддержки графических процессоров Intel Gen12+, но с предварительным планом расширения на другие устройства (AMD, NVIDIA). В этой реализации используется архитектура, в которой WebGPU использует Vulkan, а остальная часть Chromium остается на OpenGL, используя существующие, хорошо зарекомендовавшие себя пути выполнения кода. См. проблему 442791440 .

Более быстрая запись буфера и текстуры

writeBuffer() и writeTexture() были оптимизированы в Chrome, что привело к повышению производительности до 2 раз по сравнению с предыдущей версией, в зависимости от размера передаваемых данных. Это изменение также затрагивает всех пользователей реализации Dawn Wire . См. проблему 441900745 .

Утренние обновления

Команда разработчиков Android GPU выпустила первую альфа-версию привязок Kotlin для WebGPU на Android, доступных через Jetpack. Пакет androidx.webgpu предоставляет разработчикам Android доступ к современному API для работы с графическими процессорами на Kotlin, позволяя обойти проблемы, связанные с устаревшими версиями OpenGL, или сложность Vulkan — это важное событие для экосистемы!

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

Что нового в WebGPU?

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

Хром 144

Хром 143

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