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ợ. Hệ thống sẽ tự động bật các tiện ích ngôn ngữ WGSL được hỗ trợ, do đó bạn không cần yêu cầu chúng tôi cung cấp chức năng này một cách rõ ràng. Danh sách này hiện đang trống nhưng bạn có thể dự kiến sẽ có nhiều danh sách trong tương lai (ví dụ: do-while loops). Xem vấn đề bình minh: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 cục bộ bằng cách chạy Chrome trên Windows bằng cờ hiệu dòng lệnh --enable-unsafe-webgpu --use-webgpu-adapter=d3d11. Hãy xem mục Vấn đề bình minh:1705.

Nhận GPU rời theo mặc định khi dùng 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 rời sẽ được trả về khi thiết bị của người dùng sử 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 của Công cụ cho nhà phát triển

Nếu bạn sử dụng khoá depth 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 phần vấn đề chromium:1440900.

Cảnh báo cũng sẽ được đưa ra nếu một GPUBlendComponent kết hợp các thành phần rõ ràng và mặc định. Hãy xem mục Vấn đề bình minh:1785.

Mặc dù việc gửi và vẽ kích thước bằng 0 là hợp lệ, nhưng một cảnh báo vẫn khuyến khích nhà phát triển tránh sử dụng khi có thể. Xem Vấn đề bình minh:1786.

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

Một thông báo lỗi được cải tiến sẽ hiển thị khi sử dụng GPUCommandEncoder nếu finish() đã được gọi. Hãy xem mục Vấn đề bình minh:1736.

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

Phần không hợp lệ của trạng thái khung viền độ sâu hiện được chỉ định trong thông báo lỗi khi xác thực depthStencil. Hãy xem mục Vấn đề bình minh:1735.

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

Chúng tôi đã cải thiện các thông báo lỗi mà phương thức mapAsync() trả về trên đối tượng GPUBuffer để trợ giúp nhà phát triển khi gỡ lỗi. Hãy xem ví dụ bên dưới và phát hành crôm: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ông cụ gỡ lỗi của 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ể nhìn thấy các nhãn đó trong các công cụ gỡ lỗi dành riêng cho nền tảng, chẳng hạn 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 gỡ lỗi. Xem Vấn đề bình minh: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 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à dịch vụ đổ bóng phụ trợ. Kể từ nay, khi bạn bật chế độ này để gỡ lỗi, HLSL sẽ được kết xuất nếu không biên dịch được. Xem Vấn đề bình minh:1681

Thông tin cập nhật vào Bình minh

Chưa đặ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 một vùng đệm đỉnh đã đặt trước đó trong một khe nhất định. Xem Vấn đề bình minh: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ớ thẻ thông tin, 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 thiết lập 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 đề bình minh: năm 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.

Xây dựng mà không có depot_tools

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 tập lệnh Python đọc tệp DEPS thay vì yêu cầu cài đặt depot_tools bằng tất cả dự án phụ thuộc vào tập lệnh này. Xem thay đổi 131750.

Tính năng mới trong WebGPU

Danh sách tất cả nội dung được đề cập trong loạt bài Có gì mới trong WebGPU.

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