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 hoá việc 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 kiểu 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 sử 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ề khung hiển thị bộ nhớ đệm để biết thêm thông tin chi tiết và dùng thử mẫu Wireframe WebGPU.

Tiện ích swizzle_assignment của WGSL

Để đáp ứng một trong những tính năng được yêu cầu nhiều nhất của cộng đồng, tiện ích swizzle_assignment WGSL cho phép bạn ghi trực tiếp vào các thành phần vectơ, nhờ đó bạn có thể 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 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 sử 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 ánh xạ đúng cách đến 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.

Tiện ích ngôn ngữ subgroups hiện được tự động 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 phương thức 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 đề 596 về webgpu-headers.

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 155-156

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