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 phần mở rộng ngôn ngữ WGSL được hỗ trợ. Các tiện ích ngôn ngữ WGSL được hỗ trợ sẽ tự động bật, vì vậy, 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ể thấy nhiều danh sách trong tương lai (ví dụ: do-while loops). 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 thêm 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 máy bằng cách chạy Chrome trên Windows với cờ dòng lệnh --enable-unsafe-webgpu --use-webgpu-adapter=d3d11. Xem vấn đề dawn:1705.

Sử dụng GPU riêng biệt theo mặc định khi có nguồn điện xoay chiều

Trên các thiết bị macOS có GPU kép, nếu requestAdapter() được gọi mà không có tuỳ chọn powerPreference, thì GPU riêng biệt 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 DevTools

Nếu bạn sử dụng khoá depth trong GPUExtend3DDict, một cảnh báo sẽ xuất hiện trong Bảng điều khiển DevTools 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 GPUBlendComponent có cả thành phần rõ ràng và thành phần mặc định. Xem vấn đề dawn:1785.

Mặc dù các lệnh gửi và vẽ có kích thước bằng 0 là hợp lệ, nhưng nhà phát triển nên tránh sử dụng các lệnh này khi có thể. Xem vấn đề dawn:1786.

Thông báo lỗi tốt hơn

Giờ đây, thông báo lỗi được cải thiện sẽ được cung cấp khi sử dụng GPUCommandEncoder nếu finish() đã được gọi. Xem vấn đề dawn:1736.

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

Phần không hợp lệ của trạng thái bản in độ 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. 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 đó 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ừ giờ 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 để 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 (Công cụ) 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ý chương trình đổ bóng WGSL đầu vào và 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ề Dawn

Bỏ đặt vùng đệm đỉnh

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 vùng đệm đỉnh đã đặt trước đó trong một khe nhất định. 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 vẫn nằm trong bộ nhớ xếp kề, tránh lưu lượng truy cập VRAM và có thể tránh 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. 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 bản dựng mà không cần depot_tools

Tuỳ chọn CMake DAWN_FETCH_DEPENDENCIES mới cho phép bạn tìm nạp các phần phụ thuộc Dawn bằ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 depot_tools phải cài đặt. 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 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