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 thưa thớt, nhưng một số cải tiến quan trọng sắp ra mắt! Các bản phát hành trong tương lai sẽ bao gồm các tính năng như cải thiện tốc độ biên dịch chương trình đổ bóng và thay đổi đối với mô hình triển khai không đồng bộ bằng cách sử dụng WGPUFuture.

Nhóm con (tính năng đang trong quá trình 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ố). Đây là một hình thức chia sẻ dữ liệu trên nhiều luồng hiệu quả cao.

API GPU hiện đại hỗ trợ hoạt động nhóm con, nhưng chi tiết đặt tên và triển khai không giống nhau. Nhóm Chrome đã xác định được các điểm chung và hiện đang nỗ lực chuẩn hoá tính năng này. Hãy tham khảo đề xuất đó và nhận xét nếu bạn có thắc mắc.

Cờ "Tính năng của nền tảng web thử nghiệm" được triển khai ở mức tối thiểu và chưa chuẩn hoá và chưa được chuẩn hoá 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ì những lợi ích thực tế vẫn 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 để được hỗ trợ các nhóm con thử nghiệm trong WGSL, đồng thời kiểm tra các giới hạn minSubgroupSizemaxSubgroupSize của tính năng này.

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

  • subgroup_invocation_id: Giá trị tích hợp sẵn 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 quy mô 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à đúng đối với lệnh gọi đang hoạt động đó và là 0 nếu ngược lại.
  • subgroupBroadcast(value, id): Phát đi thông báo value từ lệnh gọi với 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à hằng số thời gian biên dịch.

Đoạn mã sau đây cung cấp cơ sở để mày 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 của hoạ tiết 3D

Giờ đây, với thành phần depthSlice mới trong GPURenderPassColorAttachment, bạn có thể kết xuất trực tiếp vào(các) lát hoạ tiết 3D trong chế độ kết xuất hoạ tiết, mở rộng các tính năng của hoạ tiết đó ra ngoài hình thức kết xuất hoạ tiết 2D thông thường. Việc bổ sung này cho phép bạn tạo 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 tập hoạ tiết 3D. Hãy xem mục Vấn đề bình minh:1020.

Thông tin cập nhật vào Bình minh

Xem danh sách đầy đủ các thay đổi.

Tính năng mới trong WebGPU

Danh sách tất cả nội dung được đề cập trong loạt bài Có gì mới trong WebGPU.

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