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

François Beaufort
François Beaufort

Kết hợp hai nguồn

Việc kết hợp 2 đầu ra của chương trình đổ bóng mảnh thành một bộ đệm khung hình duy nhất được gọi là hoà trộn hai nguồn. Kỹ thuật này đặc biệt hữu ích cho những ứng dụng yêu cầu các thao tác kết hợp phức tạp, chẳng hạn như những ứng dụng dựa trên các chế độ kết hợp Porter-Duff. Bằng cách thay thế các lượt kết xuất tiếp theo bằng một lượt kết xuất duy nhất, tính năng kết hợp hai nguồn có thể nâng cao hiệu suất và tính linh hoạt.

Tính năng WebGPU "dual-source-blending" mới cho phép bạn sử dụng thuộc tính WGSL @blend_src tại @location(0) để biểu thị chỉ mục nguồn kết hợp và các hệ số kết hợp sau đây: "src1", "one-minus-src1", "src1-alpha""one-minus-src1-alpha". Hãy xem đoạn mã sau, mục chromestatusvấn đề 341973423.

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("dual-source-blending")) {
  throw new Error("Dual source blending support is not available");
}
// Explicitly request dual source blending support.
const device = await adapter.requestDevice({
  requiredFeatures: ["dual-source-blending"],
});

const code = `
  enable dual_source_blending;

  struct FragOut {
    @location(0) @blend_src(0) color : vec4f,
    @location(0) @blend_src(1) blend : vec4f,
  }

  @fragment fn main() -> FragOut {
    var output : FragOut;
    output.color = vec4f(1.0, 1.0, 1.0, 1.0);
    output.blend = vec4f(0.5, 0.5, 0.5, 0.5);
    return output;
  }
`;

const shaderModule = device.createShaderModule({ code });
// Create a render pipeline with this shader module
// and run the shader on the GPU...

Cải thiện thời gian biên dịch chương trình đổ bóng trên Metal

Nhóm Chrome đang 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 giới thiệu một biểu diễn trung gian (IR) cho các thiết bị hỗ trợ WebGPU bằng phần phụ trợ Metal. 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ợ Metal, sẽ giúp trình biên dịch hoạt động hiệu quả 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 các chương trình đổ bóng WGSL của Unity sang MSL.

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 macOS.

Những điểm cải tiến này (đã có trên Android và ChromeOS) đang dần được mở rộng sang các thiết bị macOS có hỗ trợ WebGPU bằng phần phụ trợ Metal. Hãy xem vấn đề 42251016.

Ngừng sử dụng requestAdapterInfo() của GPUAdapter

Phương thức không đồng bộ GPUAdapter requestAdapterInfo() là phương thức dư thừa vì nhà phát triển đã có thể nhận GPUAdapterInfo một cách đồng bộ bằng cách sử dụng thuộc tính GPUAdapter info. Do đó, phương thức GPUAdapter requestAdapterInfo() không chuẩn hiện không được dùng nữa. Xem ý định ngừng sử dụng.

Bảng điều khiển Công cụ cho nhà phát triển hiển thị cảnh báo không dùng nữa cho requestAdapterInfo().
Cảnh báo về tính năng không dùng nữa cho requestAdapterInfo() trong Công cụ của Chrome cho nhà phát triển.

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

API C webgpu.h đã xác định một số quy ước đặt tên cho các cấu trúc tiện ích. Hãy xem những thay đổi về tên sau đây và vấn đề 42241174.

WGPURenderPassDescriptor phần mở rộng
WGPURenderPassDescriptorMaxDrawCount -> WGPURenderPassMaxDrawCount
WGPUShaderModuleDescriptor phần mở rộng
WGPUShaderModuleSPIRVDescriptor -> WGPUShaderSourceSPIRV
WGPUShaderModuleWGSLDescriptor -> WGPUShaderSourceWGSL
WGPUSurfaceDescriptor phần mở rộng
WGPUSurfaceDescriptorFromMetalLayer -> WGPUSurfaceSourceMetalLayer
WGPUSurfaceDescriptorFromWindowsHWND -> WGPUSurfaceSourceWindowsHWND
WGPUSurfaceDescriptorFromXlibWindow -> WGPUSurfaceSourceXlibWindow
WGPUSurfaceDescriptorFromWaylandSurface -> WGPUSurfaceSourceWaylandSurface
WGPUSurfaceDescriptorFromAndroidNativeWindow -> WGPUSurfaceSourceAndroidNativeWindow
WGPUSurfaceDescriptorFromXcbWindow -> WGPUSurfaceSourceXCBWindow
WGPUSurfaceDescriptorFromCanvasHTMLSelector -> WGPUSurfaceSourceCanvasHTMLSelector_Emscripten

Loại thuộc tính depthWriteEnabled của WGPUDepthStencilState chuyển từ boolean sang WGPUOptionalBool để phản ánh chính xác hơn 3 trạng thái có thể có (true, false và undefined) như trong API JavaScript. Để tìm hiểu thêm, hãy xem đoạn mã sau và webgpu-headers PR.

wgpu::DepthStencilState depthStencilState = {};
depthStencilState.depthWriteEnabled = wgpu::OptionalBool::True; // Undefined by default

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