Tính năng mới trong WebGPU (Chrome 144)

François Beaufort
François Beaufort

Đã xuất bản: Ngày 7 tháng 1 năm 2026

Tiện ích subgroup_id của WGSL

Tiện ích ngôn ngữ WGSL subgroup_id cho phép bạn sử dụng các giá trị mới tích hợp sẵn sau đây trong nhóm làm việc khi bật tiện ích subgroups:

  • subgroup_id: Cung cấp mã nhận dạng của nhóm con trong một lệnh gọi trong nhóm làm việc hiện tại.
  • num_subgroups: Báo cáo số lượng nhóm con có trong nhóm làm việc.

Trước đây, để lập chỉ mục bộ nhớ bằng cách sử dụng mã nhận dạng lệnh gọi nhóm con, bạn phải tái cấu trúc mã nhận dạng nhóm con (thường là thông qua các thao tác nguyên tử) để tránh việc truy cập bộ nhớ trùng lặp. Giờ đây, bạn có thể sử dụng subgroup_id để điền nửa còn lại của phương trình đó. Vì chức năng này chưa có trên phần phụ trợ D3D, nên chức năng này được mô phỏng ở đó. Bạn có thể tạo một sự tương đương với local_invocation_index một cách an toàn dưới dạng subgroup_invocation_id + subgroup_size * subgroup_id. Xin lưu ý rằng có thể có trường hợp các nhóm con không đầy đủ.

Bạn có thể phát hiện tính năng này bằng tiện ích ngôn ngữ này bằng cách sử dụng navigator.gpu.wgslLanguageFeatures. Bạn nên sử dụng chỉ thị yêu cầu để báo hiệu khả năng không di động với requires subgroup_id; ở đầu mã chương trình đổ bóng WGSL. Hãy xem ví dụ sau và ý định phát hành.

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

Tiện ích uniform_buffer_standard_layout của WGSL

Tiện ích ngôn ngữ WGSL uniform_buffer_standard_layout cho phép các vùng đệm đồng nhất sử dụng các ràng buộc bố cục bộ nhớ giống như vùng đệm bộ nhớ, giúp bạn dễ dàng chia sẻ cấu trúc dữ liệu trong cả hai loại vùng đệm. Điều này có nghĩa là các vùng đệm đồng nhất không còn bắt buộc phải có căn chỉnh 16 byte trên các phần tử mảng hoặc để đệm các độ lệch cấu trúc lồng nhau thành bội số của 16 byte.

Bạn có thể phát hiện tính năng này bằng tiện ích ngôn ngữ này bằng cách sử dụng navigator.gpu.wgslLanguageFeatures. Bạn nên sử dụng chỉ thị yêu cầu để báo hiệu khả năng không di động với requires uniform_buffer_standard_layout; ở đầu mã chương trình đổ bóng WGSL. Hãy xem ví dụ sau và ý định phát hành.

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 trên Linux

Nhóm Chrome đang triển khai cẩn thận WebGPU cho Linux, bắt đầu bằng việc hỗ trợ GPU Intel Gen12+ nhưng có kế hoạch dự kiến mở rộng sang nhiều thiết bị hơn (AMD, NVIDIA). Phương thức triển khai này sử dụng một kiến trúc trong đó WebGPU sử dụng Vulkan và phần còn lại của Chromium vẫn ở trên OpenGL, thực hiện các đường dẫn mã tốt đã biết. Xem vấn đề 442791440.

writeBuffer và writeTexture nhanh hơn

writeBuffer()writeTexture() đã được tối ưu hoá trong Chrome, giúp tăng hiệu suất lên đến 2 lần so với phiên bản trước, tuỳ thuộc vào kích thước của dữ liệu được chuyển. Thay đổi này cũng ảnh hưởng đến tất cả người dùng của phương thức triển khai Dawn Wire. Xem vấn đề 441900745.

Thông tin cập nhật về Dawn

Nhóm GPU Android đã phát hành bản phát hành alpha đầu tiên của các liên kết Kotlin cho WebGPU trên Android có sẵn bằng Jetpack. Gói androidx.webgpu cho phép nhà phát triển Android truy cập vào API GPU hiện đại bằng Kotlin, bỏ qua các vấn đề cũ của OpenGL hoặc độ phức tạp của Vulkan – một sự phát triển thú vị cho hệ sinh thái!

Phần này chỉ đề cập đến một số điểm nổi bật chính. Hãy xem danh sách đầy đủ các cam kết.

Tính năng mới trong WebGPU

Danh sách mọi nội dung đã được đề cập trong loạt bài Tính năng mới trong WebGPU.

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