Tính năng mới trong WebGPU (Chrome 153 – 154)

François Beaufort
François Beaufort

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

Tiện ích buffer_view WGSL

Tiện ích ngôn ngữ WGSL buffer_view cho phép diễn giải dữ liệu của một biến đồng nhất, biến lưu trữ hoặc biến nhóm công việc dưới dạng nhiều loại khác nhau. Điều này có nhiều tiện ích, từ việc sử dụng kiểu punning thông thường đến việc phân vùng một biến thành nhiều biến logic.

Để đảm bảo an toàn và đơn giản khi triển khai, bạn chỉ có thể truy cập vào các loại được diễn giải lại bằng cách sử dụng các hàm tích hợp sau:

  • bufferView<T>() diễn giải bộ nhớ tại một độ lệch byte cụ thể dưới dạng con trỏ đến loại T.
  • bufferArrayView<T>() tạo một con trỏ mảng bị giới hạn với số lượng phần tử rõ ràng.
  • bufferLength() trả về kích thước byte của vùng đệm.

Bạn có thể phát hiện tính năng của tiện ích ngôn ngữ này trong JavaScript 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 buffer_view; ở đầu mã chương trình đổ bóng WGSL. Hãy xem ví dụ sau về WGSL và ý định phát hành.

requires buffer_view;

//  +-------------------+-----------------------------+----------------------------+
//  | Byte 0 .. 3       | Byte 4 .. (4 + N - 1)       | Byte (4 + N) .. End        |
//  +-------------------+-----------------------------+----------------------------+
//  | indices_size (u32)| indices (array<u32, count>) | vertices (array<f32>)      |
//  +-------------------+-----------------------------+----------------------------+
@group(0) @binding(0) var<storage> indices_and_vertices : buffer;

fn unpack_and_process_geometry() {
  let indices_size = *bufferView<u32>(&indices_and_vertices, 0);

  let indices = bufferArrayView<array<u32>>(&indices_and_vertices, 4, indices_size);
  let vertices = bufferView<array<f32>>(&indices_and_vertices, indices_size + 4);
  ...
}

Bạn cũng có thể xem đề xuất về chế độ xem vùng đệm để biết thêm thông tin chi tiết và dùng thử mẫu WebGPU của Khung dây.

Tiện ích swizzle_assignment WGSL

Để đáp ứng một trong những yêu cầu nhiều nhất của cộng đồng về các tính năng, tiện ích WGSL swizzle_assignment cho phép bạn ghi trực tiếp vào các thành phần vectơ, giúp bạn cập nhật nhiều thành phần trong một câu lệnh duy nhất. Việc này giúp giảm đáng kể mã nguyên mẫu và cải thiện khả năng đọc của chương trình đổ bóng, đồng thời đưa WGSL phù hợp với các ngôn ngữ đổ bóng khác.

Bạn có thể phát hiện tính năng của tiện ích ngôn ngữ này trong JavaScript 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 swizzle_assignment; ở đầu mã chương trình đổ bóng WGSL. Hãy xem ví dụ sau về WGSL và ý định phát hành.

if (!navigator.gpu.wgslLanguageFeatures.has("swizzle_assignment")) {
  throw new Error(`WGSL swizzle assignment is not available`);
}

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

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

  @vertex
  fn main(@builtin(vertex_index) vertex_index: u32) -> @builtin(position) vec4f {
    var position = vec4f(0.0, 0.0, 0.0, 1.0);
    position.xy = vec2f(10.0, 20.0); // Swizzle assignment

    return position;
  }`,
});

Nội dung cập nhật về tiện ích WGSL

Mặc dù được hỗ trợ trong mã WGSL, nhưng tiện ích ngôn ngữ texture-formats-tier1 trước đây không được liên kết đúng với navigator.gpu.wgslLanguageFeatures (dưới dạng texture_formats_tier1) trong JavaScript. Vấn đề về việc lập bản đồ này hiện đã được giải quyết. Xem Chromium CL 8159562.

Giờ đây, tiện ích ngôn ngữ subgroups sẽ tự động được bật khi subgroup_size_control được bật trong WGSL. Xem vấn đề dawn:545285663.

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

Tính năng thử nghiệm wgpu::FeatureName::BufferMapWriteExtendedUsages mới cho phép bạn tạo một vùng đệm bằng wgpu::BufferUsage::MapWrite kết hợp với bất kỳ wgpu::BufferUsage nào khác, ngoại trừ wgpu::BufferUsage::MapRead để ghi trực tiếp vào vùng đệm có thể ánh xạ cũng có thể dùng GPU, loại bỏ vùng đệm dàn dựng và bản sao bổ sung trên các phần phụ trợ Vulkan và D3D12. Để biết thêm thông tin, hãy xem Buffer Map Write Extended Usages (Các cách sử dụng mở rộng của thao tác ghi vào vùng đệm) và vấn đề dawn:386255678.

Giờ đây, bạn có thể sử dụng các liên kết webgpu_cpp.h trên mọi quy trình triển khai webgpu.h thay vì bị ràng buộc với hương vị của Dawn bằng cách sử dụng webgpu_upstream_cpp_headers mới. Xem vấn đề webgpu-headers #596.

Dawn hiện yêu cầu macOS 13.0 trở lên. Xem Dawn CL 334415.

Đây chỉ là một số điểm nổi bật chính. Hãy xem danh sách đầy đủ các cam kết để biết thêm chi tiế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 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