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

François Beaufort
François Beaufort

Đã xuất bản: Ngày 23 tháng 4 năm 2025

Thuộc tính isFallbackAdapter của GPUAdapterInfo

Thuộc tính boolean isFallbackAdapter của GPUAdapterInfo cho biết liệu một 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 cải thiện quyền riêng tư 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 vào 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ợ các 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 isFallbackAdapter của GPUAdapter hay không. Xem ý định phát hành.

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 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ả hơn và dễ bảo trì hơn, 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 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 hỗ trợ WebGPU bằng phần phụ trợ D3D12. Xem vấn đề 42251045.

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

Người dùng Chrome hiện có thể nhấp chuột phải vào 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…".

Nâng cao các quy định hạn chế về chế độ tương thích

Tính năng thử nghiệm "core-features-and-limits" (nếu có trên GPUDevice) sẽ nâng cao tất cả các quy định 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. Xem vấn đề 395855517.

Việc yêu cầu GPUAdapter bằng tuỳ 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, bộ chuyển đổi đó sẽ là "core-defaulting", giống như khi sử dụng tuỳ 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.

Bộ chuyển đổi core-defaulting 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 các GPUDevice được tạo từ bộ chuyển đổi đó. Đối với bộ chuyển đổi compatibility-defaulting, tính năng "core-features-and-limits" có thể được hỗ trợ và có thể được yêu cầu trên các GPUDevice được tạo từ 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ế độ core và compatibility.

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á để chuyển sang 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 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ý ở chế độ 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 áp dụng được 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 rằng 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 được rộng rãi hơn). Lệnh gọi lại hiện 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. 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 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 147-148

Chrome 146

Chrome 145

Chrome 144

Chrome 143

Chrome 142

Chrome 141

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