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

François Beaufort
François Beaufort

Các tiện ích ngôn ngữ WGSL được hỗ trợ

Thành phần wgslLanguageFeatures của đối tượng GPU liệt kê tên của các tiện ích ngôn ngữ WGSL được hỗ trợ. Các tiện ích ngôn ngữ WGSL được hỗ trợ sẽ tự động bật, do đó bạn không cần phải yêu cầu một tiện ích cụ thể. Danh sách này hiện đang trống nhưng bạn có thể mong đợi nhiều vấn đề trong tương lai (ví dụ: do-while loops). Hãy xem vấn đề dawn:1777.

if (navigator.gpu.wgslLanguageFeatures?.has("unknown-feature")) {
  // Use unknown-feature in WGSL shader code.
}

Hỗ trợ thử nghiệm cho Direct3D 11

Nhóm Chromium đang nỗ lực bổ sung tính năng hỗ trợ WebGPU cho Direct3D 11. Giờ đây, bạn có thể thử nghiệm tính năng này trên thiết bị của mình bằng cách chạy Chrome trên Windows với cờ dòng lệnh --enable-unsafe-webgpu --use-webgpu-adapter=d3d11. Hãy xem vấn đề dawn:1705.

Nhận GPU rời theo mặc định khi cắm nguồn AC

Trên các thiết bị macOS có 2 GPU, nếu requestAdapter() được gọi mà không có lựa chọn powerPreference, thì GPU rời sẽ được trả về khi thiết bị của người dùng đang dùng nguồn điện xoay chiều. Nếu không, GPU tích hợp sẽ được trả về. Xem thay đổi 4499307.

Cải thiện trải nghiệm của nhà phát triển

Cảnh báo mới trong Công cụ cho nhà phát triển

Nếu khoá depth được dùng trong GPUExtend3DDict, thì một cảnh báo sẽ xuất hiện trong Bảng điều khiển Công cụ cho nhà phát triển vì khoá chính xác là depthOrArrayLayers. Xem vấn đề chromium:1440900.

Hệ thống cũng sẽ đưa ra cảnh báo nếu một GPUBlendComponent có cả thành viên được thêm rõ ràng và thành viên mặc định. Hãy xem vấn đề dawn:1785.

Mặc dù các lệnh điều phối và lệnh vẽ có kích thước bằng 0 là hợp lệ, nhưng cảnh báo sẽ khuyến khích nhà phát triển tránh sử dụng các lệnh này khi có thể. Hãy xem vấn đề dawn:1786.

Thông báo lỗi rõ ràng hơn

Giờ đây, một thông báo lỗi hiệu quả hơn sẽ xuất hiện khi bạn sử dụng GPUCommandEncoder nếu finish() đã được gọi. Xem vấn đề dawn:1736.

Khi gửi các vùng đệm lệnh có các đối tượng đã bị huỷ, nhãn của các vùng đệm lệnh được dùng trong submit() hiện xuất hiện trong thông báo lỗi. Hãy xem vấn đề dawn:1747.

Phần không hợp lệ của trạng thái khuôn tô chiều sâu hiện được chỉ định trong thông báo lỗi khi xác thực depthStencil. Xem vấn đề dawn:1735.

Thông báo lỗi xác thực minBindingSize hiện báo cáo nhóm và số lượng liên kết không xác thực được, cũng như vùng đệm. Hãy xem vấn đề dawn:1604.

Chúng tôi đã cải thiện thông báo lỗi do phương thức mapAsync() trả về trên đối tượng GPUBuffer để giúp nhà phát triển gỡ lỗi. Hãy xem ví dụ bên dưới và vấn đề chromium:1431622.

// Create a GPU buffer and map it.
const descriptor = { size: 0, usage: GPUBufferUsage.MAP_READ };
const buffer = device.createBuffer(descriptor);
buffer.mapAsync(GPUMapMode.READ);

// Before it has been mapped, request another mapping.
try {
  await buffer.mapAsync(GPUMapMode.READ);
} catch (error) {
  // New! Error message tells you mapping is already pending.
  console.warn(error.message);
}

Nhãn trong các công cụ gỡ lỗi macOS

Nút bật/tắt gỡ lỗi use_user_defined_labels_in_backend cho phép bạn chuyển tiếp nhãn đối tượng đến phần phụ trợ để có thể xem các nhãn này trong các công cụ gỡ lỗi dành riêng cho nền tảng như RenderDoc, PIX hoặc Instruments. Từ nay trở đi, bạn sẽ có trải nghiệm gỡ lỗi tốt hơn trên macOS khi bật tính năng này cho gỡ lỗi. Xem vấn đề dawn:1784

Ảnh chụp màn hình ứng dụng Instruments trên macOS có các nhãn tuỳ chỉnh đến từ WebGPU.
Nhãn do người dùng xác định trong ứng dụng Instruments trên macOS.

Ghi nhật ký HLSL nếu quá trình biên dịch không thành công

Nút bật/tắt gỡ lỗi dump_shaders cho phép bạn ghi nhật ký các chương trình đổ bóng WGSL đầu vào và các chương trình đổ bóng phụ trợ đã dịch. Từ giờ trở đi, khi bạn bật tính năng này để gỡ lỗi, HLSL sẽ được kết xuất nếu không biên dịch được. Xem vấn đề dawn:1681

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

Vùng đệm đỉnh chưa đặt

Việc truyền nullptr thay vì wgpu::Buffer đến SetVertexBuffer() trên wgpu::RenderPassEncoder hoặc wgpu::RenderBundleEncoder cho phép bạn huỷ đặt một vùng đệm đỉnh đã đặt trước đó trong một khe cắm nhất định. Hãy xem vấn đề dawn:1675.

// Set vertex buffer in slot 0.
myRenderPassEncoder.SetVertexBuffer(0, myVertexBuffer);

// Then later, unset vertex buffer in slot 0.
myRenderPassEncoder.SetVertexBuffer(0, nullptr);

Tệp đính kèm tạm thời

Bạn có thể tạo các tệp đính kèm cho phép các thao tác truyền kết xuất nằm trong bộ nhớ của ô, tránh lưu lượng truy cập VRAM và có thể tránh việc phân bổ VRAM cho các hoạ tiết bằng cách đặt mức sử dụng wgpu::TextureUsage::TransientAttachment. Tính năng này chỉ được hỗ trợ cho Metal và Vulkan. Hãy xem vấn đề dawn: 1695.

wgpu::TextureDescriptor desc;
desc.format = wgpu::TextureFormat::RGBA8Unorm;
desc.size = {1, 1, 1};
desc.usage = wgpu::TextureUsage::RenderAttachment |
             wgpu::TextureUsage::TransientAttachment;

auto transientTexture = device.CreateTexture(&desc);

// You can now create views from the texture to serve as transient
// attachments, e.g. as color attachments in a render pipeline.

Tạo dựng mà không cần depot_tools

Một lựa chọn DAWN_FETCH_DEPENDENCIES CMake mới cho phép bạn tìm nạp các phần phụ thuộc Dawn bằng cách sử dụng một tập lệnh Python đọc các tệp DEPS thay vì yêu cầu tất cả các dự án phụ thuộc vào tập lệnh đó phải cài đặt depot_tools. Xem thay đổi 131750.

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