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

François Beaufort
François Beaufort

Ngày phát hành: 23 tháng 4 năm 2025

Thuộc tính GPUAdapterInfo isFallbackAdapter

Thuộc tính boolean GPUAdapterInfo isFallbackAdapter cho biết liệu GPUAdapter có giới hạn hiệu suất đáng kể để đổi lấy khả năng tương thích rộng hơn, hành vi dễ dự đoán hơn hay quyền riêng tư được cải thiện hay không. Việc bổ sung này là cần thiết vì các thư viện lấy đối tượng GPUDevice do người dùng cung cấp không thể truy cập thông tin này thông qua thuộc tính adapterInfo trên GPUDevice. Hãy xem ví dụ sau và vấn đề 403172841.

const adapter = await navigator.gpu.requestAdapter();

if (adapter?.info.isFallbackAdapter) {
  // The returned adapter is a software-backed fallback adapter, which
  // may have significantly lower performance and fewer features.
}

Vì Chrome chưa hỗ trợ bộ chuyển đổi dự phòng, nên isFallbackAdapter hiện luôn là sai trên thiết bị của người dùng. Chúng tôi đang điều tra xem có thể ngừng sử dụng và xoá thuộc tính GPUAdapter isFallbackAdapter hay không. Xem ý định vận chuyển.

Cải thiện thời gian biên dịch chương trình đổ bóng trên D3D12

Nhóm Chrome liên tục cải thiện Tint, trình biên dịch ngôn ngữ chương trình đổ bóng WebGPU, bằng cách thêm một bản trình bày trung gian (IR) cho các thiết bị hỗ trợ WebGPU bằng phần phụ trợ D3D12. IR này, nằm giữa cây cú pháp trừu tượng (AST) của Tint và trình ghi phụ trợ HLSL, sẽ giúp trình biên dịch hiệu quả và dễ bảo trì hơn, cuối cùng mang lại lợi ích cho cả nhà phát triển và người dùng. Các thử nghiệm ban đầu cho thấy phiên bản mới của Tint nhanh hơn gấp 10 lần khi dịch chương trình đổ bóng WGSL của Unity sang HLSL.

Sơ đồ quy trình cho thấy quá trình chuyển đổi mã chương trình đổ bóng WGSL thành hướng dẫn GPU cấp thấp.
Tạo quy trình kết xuất trong Windows.

Những điểm cải tiến này (hiện đã có trên Android, ChromeOS và macOS) đang được mở rộng dần sang các thiết bị Windows hỗ trợ WebGPU bằng phần phụ trợ D3D12. Xem vấn đề 42251045.

Lưu và sao chép hình ảnh in trên vải canvas

Giờ đây, người dùng Chrome có thể nhấp chuột phải vào canvas WebGPU và truy cập vào các tuỳ chọn trong trình đơn theo bối cảnh Save Image As… (Lưu hình ảnh dưới dạng…) hoặc Copy Image (Sao chép hình ảnh). Xem vấn đề 40902474.

2
Người dùng đã chọn trình đơn theo bối cảnh "Save Image As…" (Lưu hình ảnh dưới dạng…).

Hạn chế về chế độ tương thích của Lift

Tính năng "core-features-and-limits" thử nghiệm (khi có trên GPUDevice) sẽ gỡ bỏ tất cả các hạn chế của chế độ tương thích (tính năng và giới hạn) khi cờ chrome://flags/#enable-unsafe-webgpu được bật. Xem vấn đề 395855517.

Việc yêu cầu GPUAdapter bằng tuỳ chọn featureLevel: "compatibility" sẽ gợi ý trình duyệt chọn chế độ tương thích WebGPU thử nghiệm. Nếu thành công, bộ chuyển đổi thu được sẽ là "khả năng tương thích-mặc định". Nếu không, giá trị này sẽ là "core-defaulting" (mặc định của lõi), tương tự như khi sử dụng tuỳ chọn featureLevel: "core". Hơn nữa, việc gọi requestDevice() mà không có requiredFeaturesrequiredLimits sẽ yêu cầu một GPUDevice có các chức năng mặc định của GPUAdapter.

Bộ chuyển đổi mặc định của Core luôn hỗ trợ tính năng "core-features-and-limits" và tính năng này sẽ tự động được bật trên GPUDevices được tạo từ các bộ chuyển đổi đó. Đối với các bộ chuyển đổi mặc định về khả năng tương thích, tính năng "core-features-and-limits" có thể được hỗ trợ và có thể được yêu cầu trên GPUDevices được tạo từ các bộ chuyển đổi đó. Cả hai loại bộ chuyển đổi cũng có thể hỗ trợ các tính năng như "float32-blendable" (không bắt buộc ở cả chế độ lõi và chế độ tương thích).

Ví dụ sau đây là về một ứng dụng yêu cầu "float32-blendable" và hỗ trợ sử dụng các tính năng cốt lõi nếu có, nhưng chỉ sử dụng các tính năng tương thích nếu không có các tính năng cốt lõi.

const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });

if (!adapter || !adapter.features.has("float32-blendable")) {
  throw new Error("32-bit float textures blending support is not available");
}

const requiredFeatures = [];
if (adapter.features.has("core-features-and-limits")) {
  requiredFeatures.push("core-features-and-limits");
}

const device = await adapter.requestDevice({ requiredFeatures });

if (!device.features.has("core-features-and-limits")) {
  // Compatibility mode restrictions validation rules will apply.
}

Các thuộc tính GPUAdapter featureLevelisCompatibilityMode thử nghiệm đã bị xoá và thay thế bằng tính năng "core-features-and-limits". Xem vấn đề 395855516.

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

Enum trạng thái gọi lại InstanceDropped đã được đổi tên thành CallbackCancelled để làm rõ rằng lệnh gọi lại đã bị huỷ, nhưng quá trình xử lý trong nền liên quan đến sự kiện, chẳng hạn như biên dịch quy trình, có thể vẫn đang chạy. Tên mới có thể áp dụng rộng rãi hơn, trong trường hợp một cơ chế huỷ khác được thêm vào sau này. Xem vấn đề 520.

Enum wgpu::PopErrorScopeStatus::EmptyStack cho biết không thể bật ngăn xếp phạm vi lỗi đã được đổi tên thành wgpu::PopErrorScopeStatus::Error (cũng áp dụng chung hơn). Giờ đây, lệnh gọi lại cũng bao gồm thông báo giải thích lỗi tương ứng để giúp gỡ lỗi. Xem vấn đề 369.

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 mọi nội dung đã được đề cập trong loạt bài Tính năng mới trong WebGPU.

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