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

François Beaufort
François Beaufort

Ngày xuất bản: 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 bố cục nhóm liên kết trống yêu cầu thêm một nhóm liên kết không có liên kết nào, đ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ì các bố cục nhóm liên kết rỗng hiện được cho phép và bị bỏ qua khi tạo bố cục quy trình. Điều này sẽ giúp quá trình 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ể gán 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. 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 nhìn mở rộng ra ngoài giới hạn của mục tiêu 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 thành phần 2D 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 vào chế độ tương thích thử nghiệm trên Android

Giờ đây, 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 GPUAdapter ở chế độ tương thích với tuỳ 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ề trình chuyển đổi chế độ tương thích trong webgpureport.org.

Xoá giới hạn maxInterStageShaderComponents

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

  • Tính năng dự phòng với maxInterStageShaderVariables: Giới hạn này đã phục vụ một mục đích tương tự, kiểm soát lượng dữ liệu được truyền giữa các giai đoạn chương trình đổ bóng.
  • Sự 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 sự khác biệt này là nhỏ 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ý hai giới hạn riêng biệt với những điểm khác biệt tinh tế, họ có thể tập trung vào maxInterStageShaderVariables được đặt tên phù hợp và toàn diện hơn.

Xem ý định xoávấn đề 364338810.

Thông tin cập nhật về Dawn

Bạn không thể sử dụng bộ lấy mẫu lọc để lấy mẫu hoạ tiết chiều sâu nữa. Xin lưu ý rằng bạn chỉ có thể sử dụng hoạ tiết độ sâu với 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 làm phẳng 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 phầ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 mức sử dụng API Dawn 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 tệp .gputrace có thể được tải sau vào Trình gỡ lỗi Metal của XCode. Xem tài liệu về Debugging Dawn.

Phần này chỉ đề cập đến một số điểm nổi bật chính. Hãy 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 Tính năng mới trong WebGPU.

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