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

François Beaufort
François Beaufort

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

Tiện ích subgroup_id WGSL

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

  • subgroup_id: Cung cấp mã nhận dạng của một nhóm phụ trong lệnh gọi trong nhóm công 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 mã nhận dạng lệnh gọi nhóm con, bạn phải tái tạo mã nhận dạng nhóm con (thường là thông qua các thao tác nguyên tử) để tránh các lần truy cập bộ nhớ trùng lặp. Giờ đây, bạn có thể sử dụng subgroup_id để điền vào 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 giá trị tương đương cho local_invocation_index 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 nhỏ không đầy đủ.

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

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 WGSL uniform_buffer_standard_layout

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 lưu trữ, 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 của tiện ích ngôn ngữ này bằng cách dùng navigator.gpu.wgslLanguageFeatures. Bạn nên sử dụng một chỉ thị yêu cầu để báo hiệu khả năng không thể chuyển đổi với requires uniform_buffer_standard_layout; ở đầu mã chương trình đổ bóng WGSL. Hãy xem ví dụ sau và ý định vận chuyển.

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 WebGPU cho Linux một cách thận trọng, bắt đầu bằng việc hỗ trợ GPU Intel Gen12 trở lên nhưng có kế hoạch mở rộng sang nhiều thiết bị khác (AMD, NVIDIA). Phương thức triển khai này sử dụng một cấu 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 hiện có. Xem vấn đề 442791440.

writeBuffer và writeTexture nhanh hơn

writeBuffer()writeTexture() đã được tối ưu hoá trong Chrome, giúp cải thiện hiệu suất lên đến gấp 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 việc triển khai Dawn Wire. Hãy xem vấn đề 441900745.

Thông tin cập nhật về bình minh

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 giúp nhà phát triển Android truy cập vào một 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 bước phát triển thú vị cho hệ sinh thái!

Đây chỉ là một số điểm nổi bật chính. 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 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