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

François Beaufort
François Beaufort

Ngày đăng: 23 tháng 4 năm 2025

Thuộc tính GPUAdapterInfo isFallbackAdapter

Thuộc tính boolean isFallbackAdapter GPUAdapterInfo cho biết liệu GPUAdapter có những hạn chế đáng kể về hiệu suất để đổi lấy khả năng tương thích rộng hơn, hành vi dễ dự đoán hơn hoặc 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à false 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 không ngừng 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 biểu diễn trung gian (IR) cho những 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 hoạt động hiệu quả hơn và dễ bảo trì hơn, từ đó 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.

Một sơ đồ quy trình cho thấy quy trình chuyển đổi mã chương trình đổ bóng WGSL thành các chỉ 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 (đã có trên Android, ChromeOS và macOS) đang dần được mở rộng sang các thiết bị Windows có hỗ trợ WebGPU bằng phần phụ trợ D3D12. Hãy xem vấn đề 42251045.

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

Giờ đây, người dùng Chrome có thể nhấp chuột phải vào một canvas WebGPU và truy cập vào các lựa chọn trong trình đơn theo bối cảnh Lưu hình ảnh dưới dạng... hoặc 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 "Lưu hình ảnh dưới dạng...".

Gỡ bỏ các hạn chế của chế độ tương thích

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

Việc yêu cầu GPUAdapter bằng lựa chọn featureLevel: "compatibility" sẽ gợi ý cho 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 kết quả sẽ là "compatibility-defaulting". Nếu không, đó là "core-defaulting", tức là giống như khi bạn sử dụng lựa chọn featureLevel: "core". Ngoài ra, 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.

Các bộ điều hợp mặc định của lõi 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 GPUDevice được tạo từ các bộ điều hợp đó. Đố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 này cũng có thể hỗ trợ các tính năng như "float32-blendable" (không bắt buộc ở cả chế độ tương thích và chế độ cốt lõi).

Ví dụ sau đây dành cho 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ó 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á để thay thế bằng tính năng "core-features-and-limits". Xem vấn đề 395855516.

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

Enum trạng thái lệnh 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) vẫn có thể đang chạy. Tên mới này có tính áp dụng chung hơn, trong trường hợp bạn thêm một cơ chế huỷ khác sau này. Hã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 có thể áp dụng rộng rãi hơn). Giờ đây, lệnh gọi lại cũng bao gồm một thông báo giải thích lỗi tương ứng để giúp gỡ lỗi. Hãy xem vấn đề 369.

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