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ó vẻ hơi ít ỏi 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 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 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 cung cấp một hình thức chia sẻ dữ liệu hiệu quả cao giữa các luồng.

Các thao tác trong nhóm con được các API GPU hiện đại hỗ trợ, nhưng tên và thông tin chi tiết về cách 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ó câu hỏi.

Có một cách triển khai tối thiểu và không chuẩn hoá các nhóm con đằng sau cờ "Tính năng nền tảng web thử nghiệm" 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ì các 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 để được hỗ trợ 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, bạn sẽ có quyền 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 kích thước 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 tin value từ lệnh gọi với subgroup_invocation_id khớp với id cho tất cả lệnh gọi trong nhóm con. Lưu ý: id phải là hằng số tại thời điểm biên dịch.

Đoạn mã sau đây cung cấp một 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 lát cắt của hoạ tiết 3D

Giờ đây, bạn có thể kết xuất trực tiếp đến(các) lát cắt của hoạ tiết 3D trong các lượt kết xuất, mở rộng khả năng của hoạ tiết này ngoài tính năng kết xuất hoạ tiết 2D thông thường, với thành phần depthSlice mới trong GPURenderPassColorAttachment. Ví dụ: tính năng bổ sung này cho phép bạn 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ề Dawn

Hãy xem danh sách đầy đủ các thay đổi.

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