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

François Beaufort
François Beaufort

Trong thời gian này, số lượng tính năng của WebGPU có thể hơi ít, nhưng một số tiến bộ quan trọng sắp đến! 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à các thay đổi đối với mô hình không đồng bộ của việc 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 16 số). Đây là một hình thức chia sẻ dữ liệu trên nhiều luồng mang lại hiệu quả cao.

Các hoạt động của nhóm con được API GPU hiện đại hỗ trợ, nhưng thông tin đặt tên và triển khai không giống 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ó cách triển khai tối thiểu và chưa được chuẩn hoá các nhóm con phía sau "Các tính năng nền tảng web thử nghiệm" gắn cờ 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 bằng tính năng này để được hỗ trợ cho 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 tính năng này, bạn sẽ có quyền truy cập vào những tính năng bổ sung sau:

  • subgroup_invocation_id: Một giá trị tích hợp sẵn cho chỉ mục của luồng trong nhóm con.
  • subgroup_size: Một giá trị tích hợp sẵn để 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 đúng với lệnh gọi đang hoạt động đó và bằng 0 nếu ngược lại.
  • subgroupBroadcast(value, id): Truyền phát value từ lệnh gọi có subgroup_invocation_id khớp với id đến tất 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ở để tra cứu 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 hoạ tiết 3D

Giờ đây, bạn có thể kết xuất trực tiếp vào(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 kết xuất vượt ngoài khả năng kết xuất hoạ tiết 2D phổ biến, với thành phần depthSlice mới trong GPURenderPassColorAttachment. Ví dụ, công cụ 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 thành khối hoạ tiết 3D. Xem vấn đề buổi sáng:1020.

Cập nhật bình minh

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

Tính năng mới trong WebGPU

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

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