Nowości w WebGPU (Chrome 144)

François Beaufort
François Beaufort

Data publikacji: 7 stycznia 2026 r.

Rozszerzenie WGSL subgroup_id

Rozszerzenie języka WGSL subgroup_id umożliwia korzystanie z tych nowych wbudowanych wartości w grupach roboczych, gdy rozszerzenie subgroups jest włączone:

  • subgroup_id: podaje identyfikator podgrupy wywołania w bieżącej grupie roboczej.
  • num_subgroups: podaje liczbę podgrup w grupie roboczej.

Wcześniej, aby indeksować pamięć za pomocą identyfikatorów wywołań podgrup, trzeba było odtworzyć identyfikator podgrupy (zwykle za pomocą operacji atomowych), aby uniknąć nakładających się dostępów do pamięci. Teraz możesz użyć subgroup_id, aby wypełnić drugą połowę tego równania. Ta funkcja nie jest jeszcze dostępna w przypadku backendu D3D, więc jest tam emulowana. Można bezpiecznie utworzyć odpowiednik local_invocation_index jako subgroup_invocation_id + subgroup_size * subgroup_id. Pamiętaj, że w niektórych przypadkach podgrupy mogą nie być pełne.

To rozszerzenie językowe można wykryć za pomocą funkcji navigator.gpu.wgslLanguageFeatures. Zalecamy używanie dyrektywy requires, aby zasygnalizować potencjalną nieprzenośność kodu cieniowania WGSL za pomocą znaku requires subgroup_id; na początku kodu. Zapoznaj się z tym przykładem i intencją wysyłki.

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.
  }`,
});

Rozszerzenie WGSL uniform_buffer_standard_layout

Rozszerzenie języka WGSL uniform_buffer_standard_layout umożliwia buforom jednolitym używanie tych samych ograniczeń układu pamięci co bufory pamięci masowej, co ułatwia udostępnianie struktur danych w obu rodzajach buforów. Oznacza to, że bufory jednolite nie muszą już mieć 16-bajtowego wyrównania elementów tablicy ani dopełniać przesunięć zagnieżdżonych struktur do wielokrotności 16 bajtów.

To rozszerzenie językowe można wykryć za pomocą funkcji navigator.gpu.wgslLanguageFeatures. Zalecamy używanie dyrektywy requires, aby zasygnalizować potencjalną nieprzenośność kodu cieniowania WGSL za pomocą znaku requires uniform_buffer_standard_layout; na początku kodu. Zapoznaj się z tym przykładem i intencją wysyłki.

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 w systemie Linux

Zespół Chrome stopniowo wdraża WebGPU na Linuksa, zaczynając od obsługi procesorów graficznych Intel Gen12+, ale z planem rozszerzenia tej obsługi na więcej urządzeń (AMD, NVIDIA). Ta implementacja wykorzystuje architekturę, w której WebGPU używa interfejsu Vulkan, a pozostała część Chromium pozostaje w OpenGL, korzystając z istniejących, dobrze znanych ścieżek kodu. Zobacz problem 442791440.

Szybsze funkcje writeBuffer i writeTexture

writeBuffer()writeTexture() zostały zoptymalizowane w Chrome, co w zależności od rozmiaru przesyłanych danych pozwala uzyskać nawet 2-krotnie lepszą wydajność niż w poprzedniej wersji. Ta zmiana dotyczy też wszystkich użytkowników implementacji Dawn Wire. Zobacz zgłoszenie 441900745.

Aktualizacje o świcie

Zespół Android GPU opublikował pierwszą wersję alfa powiązań Kotlin z WebGPU na Androidzie, które są dostępne w Jetpacku. Pakiet androidx.webgpu zapewnia deweloperom Androida dostęp do nowoczesnego interfejsu GPU API w Kotlinie, co pozwala uniknąć problemów ze starszym interfejsem OpenGL lub złożonością Vulkan. To ekscytująca nowość w ekosystemie.

Obejmuje to tylko niektóre z najważniejszych informacji. Zapoznaj się z pełną listą zatwierdzeń.

Nowości w WebGPU

Lista wszystkich tematów omówionych w serii Nowości w WebGPU.

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