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

François Beaufort
François Beaufort

Số lượng tính năng WebGPU có thể hơi ít lần này, nhưng một số tiến bộ lớn sắp ra mắt! Các bản phát hành trong tương lai sẽ bao gồm những tính năng như cải thiện tốc độ biên dịch chương trình đổ bóng và các thay đổi đối với mô hình không đồng bộ của quá trình triển khai bằng WGPUFuture.

Nhóm con (tính năng đang được phát triển)

Tính năng nhóm con cho phép tính song song ở cấp SIMD, cho phép các luồng trong một nhóm giao tiếp và thực hiện các phép toán tập thể (ví dụ: tính tổng của 16 số). Điều này mang đến một hình thức chia sẻ dữ liệu giữa các luồng có hiệu quả cao.

Các hoạt động của nhóm con được hỗ trợ bởi các API GPU hiện đại, nhưng tên và thông tin chi tiết về việc triển khai sẽ khác nhau. Nhóm Chrome đã xác định được những điểm chung và hiện đang nỗ lực chuẩn hoá tính năng này. Hãy xem đề xuấtbình luận nếu bạn có thắc mắc.

Có một cách triển khai tối thiểu và không theo tiêu chuẩn của các nhóm con đằng sau cờ "Experimental Web Platform Features" (Các tính năng thử nghiệm của nền tảng web) tại chrome://flags/#enable-experimental-web-platform-features để các nhà phát triển có thể dùng thử và chia sẻ ý kiến phản hồi vì lợi ích thực tế chưa được chứng minh trong bối cảnh WebGPU.

Khi tính năng "chromium-experimental-subgroups" có trong GPUAdapter, hãy yêu cầu GPUDevice có tính năng này để nhận được sự hỗ trợ cho các nhóm con thử nghiệm trong WGSL và kiểm tra các giới hạn minSubgroupSizemaxSubgroupSize của nhóm con đó.

Bạn cũng cần bật rõ ràng tiện ích này trong mã WGSL bằng enable chromium_experimental_subgroups. Khi bật chế độ này, bạn sẽ có quyền sử dụng các tính năng bổ sung sau:

  • subgroup_invocation_id: Một giá trị tích hợp cho chỉ mục của luồng trong nhóm con.
  • subgroup_size: Giá trị tích hợp để truy cập vào kích thước của nhóm con.
  • subgroupBallot(value): Trả về một tập hợp các trường bit, trong đó bit tương ứng với subgroup_invocation_id là 1 nếu value là true cho lệnh gọi đang hoạt động đó và là 0 nếu không.
  • subgroupBroadcast(value, id): Truyền value từ lệnh gọi có subgroup_invocation_id khớp với id đến tất cả các lệnh gọi trong nhóm con. Lưu ý: id phải là một hằng số thời gian biên dịch.

Đoạn mã sau đây cung cấp cơ sở để bạn thử nghiệm và khám phá tiềm năng của các nhóm con.

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("chromium-experimental-subgroups")) {
  throw new Error("Experimental subgroups support is not available");
}
// Explicitly request experimental subgroups support.
const device = await adapter.requestDevice({
  requiredFeatures: ["chromium-experimental-subgroups"],
});

const shaderModule = device.createShaderModule({ code: `
  enable chromium_experimental_subgroups;

  @compute @workgroup_size(64) fn main(
      @builtin(global_invocation_id) global_id : vec3u,
      @builtin(subgroup_size) sg_size : u32,
      @builtin(subgroup_invocation_id) sg_id : u32) {
    // TODO: Use subgroupBallot() and subgroupBroadcast().
  }`,
});

Kết xuất thành lát kết cấu 3D

Giờ đây, bạn có thể kết xuất trực tiếp vào(các) lát kết cấu 3D trong các lượt kết xuất, mở rộng khả năng của kết cấu này ngoài việc kết xuất kết cấu 2D thông thường, bằng thành phần depthSlice mới trong GPURenderPassColorAttachment. Ví dụ: nhờ bổ sung này, bạn có thể tạo các cảnh và hiệu ứng dựa trên voxel bằng cách kết xuất trực tiếp vào các khối kết cấu 3D. Xem vấn đề dawn:1020.

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

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