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

François Beaufort
François Beaufort

Ngày đăng: 26 tháng 3 năm 2025

Cho phép tạo bố cục quy trình bằng bố cục nhóm liên kết rỗng

Trước đây, việc tạo một bố cục nhóm liên kết trống đòi hỏi phải thêm một nhóm liên kết không có liên kết, điều này gây bất tiện. Điều này không còn cần thiết nữa vì bố cục nhóm liên kết rỗng hiện được cho phép và bỏ qua khi tạo bố cục quy trình. Điều này sẽ giúp việc phát triển trở nên dễ dàng hơn.

Ví dụ: bạn có thể muốn tạo một quy trình chỉ sử dụng bố cục nhóm liên kết 0 và 2. Bạn có thể chỉ định bố cục nhóm liên kết 1 cho dữ liệu mảnh và bố cục nhóm liên kết 2 cho dữ liệu đỉnh, sau đó kết xuất mà không cần chương trình đổ bóng mảnh. Hãy xem vấn đề 377836524.

const bgl0 = myDevice.createBindGroupLayout({ entries: myGlobalEntries });
const bgl1 = myDevice.createBindGroupLayout({ entries: myFragmentEntries });
const bgl2 = myDevice.createBindGroupLayout({ entries: myVertexEntries });

// Create a pipeline layout that will be used to render without a fragment shader.
const myPipelineLayout = myDevice.createPipelineLayout({
  bindGroupLayouts: [bgl0, null, bgl2],
});

Cho phép khung hiển thị mở rộng quá giới hạn của đích kết xuất

Các yêu cầu về việc xác thực khung nhìn đã được nới lỏng để cho phép khung nhìn vượt quá ranh giới mục tiêu kết xuất. Điều này đặc biệt hữu ích khi vẽ các phần tử 2D, chẳng hạn như giao diện người dùng có thể mở rộng ra ngoài khung nhìn hiện tại. Xem vấn đề 390162929.

const passEncoder = myCommandEncoder.beginRenderPass({
  colorAttachments: [
    {
      view: myColorTexture.createView(),
      loadOp: "clear",
      storeOp: "store",
    },
  ],
});

// Set a viewport that extends past the render target's bounds by 8 pixels
// in all directions.
passEncoder.setViewport(
  /*x=*/ -8,
  /*y=*/ -8,
  /*width=*/ myColorTexture.width + 16,
  /*height=*/ myColorTexture.height + 16,
  /*minDepth=*/ 0,
  /*maxDepth=*/ 1,
);

// Draw geometry and complete the render pass as usual.

Dễ dàng truy cập hơn vào chế độ tương thích thử nghiệm trên Android

Chỉ cần cờ chrome://flags/#enable-unsafe-webgpu là bạn có thể bật tất cả các chức năng cần thiết cho chế độ tương thích WebGPU thử nghiệm trên Android. Nhờ đó, bạn có thể yêu cầu một GPUAdapter ở chế độ tương thích bằng lựa chọn featureLevel: "compatibility" và thậm chí có quyền truy cập vào phần phụ trợ OpenGL ES trên các thiết bị không hỗ trợ Vulkan. Hãy xem ví dụ sau và vấn đề dawn:389876644.

// Request a GPUAdapter in compatibility mode.
const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });
Trang báo cáo WebGPU cho thấy một GPUAdapter ở chế độ tương thích trên thiết bị Android.
Thông tin về bộ chuyển đổi chế độ tương thích trong webgpureport.org.

Xoá giới hạn maxInterStageShaderComponents

Như đã thông báo trước đây, giới hạn maxInterStageShaderComponents sẽ bị xoá do một số yếu tố kết hợp:

  • Dư thừa với maxInterStageShaderVariables: Giới hạn này đã có mục đích tương tự là kiểm soát lượng dữ liệu được truyền giữa các giai đoạn của chương trình đổ bóng.
  • Chênh lệch nhỏ: Mặc dù có sự khác biệt nhỏ trong cách tính hai giới hạn này, nhưng những khác biệt này không đáng kể và có thể được quản lý hiệu quả trong giới hạn maxInterStageShaderVariables.
  • Đơn giản hoá: Việc xoá maxInterStageShaderComponents giúp đơn giản hoá giao diện chương trình đổ bóng và giảm độ phức tạp cho nhà phát triển. Thay vì quản lý 2 hạn mức riêng biệt có sự khác biệt nhỏ, họ có thể tập trung vào maxInterStageShaderVariables toàn diện và có tên phù hợp hơn.

Hãy xem ý định xoávấn đề 364338810.

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

Bạn không còn có thể sử dụng bộ lấy mẫu lọc để lấy mẫu một hoạ tiết độ sâu nữa. Xin lưu ý rằng bạn chỉ có thể dùng hoạ tiết độ sâu với một bộ lấy mẫu không lọc hoặc bộ lấy mẫu so sánh. Xem vấn đề 379788112.

Các cấu trúc WGPURequiredLimitsWGPUSupportedLimits đã được đơn giản hoá thành WGPULimits. Xem vấn đề 374263404.

Các cấu trúc sau đây đã được đổi tên. Xem vấn đề 42240793.

  • WGPUImageCopyBuffer đổi tên thành WGPUTexelCopyBufferInfo
  • WGPUImageCopyTexture đổi tên thành WGPUTexelCopyTextureInfo
  • WGPUTextureDataLayout đổi tên thành WGPUTexelCopyBufferLayout

Các thành viên subgroupMinSizesubgroupMaxSize đã được thêm vào cấu trúc WGPUAdapterInfo. Xem webgpu-headers PR.

Giờ đây, bạn có thể theo dõi việc sử dụng Dawn API trong Metal khi chạy chương trình bằng biến môi trường DAWN_TRACE_FILE_BASE. Biến này sẽ lưu một tệp .gputrace mà sau này có thể được tải vào Metal Debugger của Xcode. Xem tài liệu Gỡ lỗi Dawn.

Đây chỉ là một số điểm nổi bật chính. 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