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

François Beaufort
François Beaufort

Kết hợp nguồn kép

Việc kết hợp hai đầu ra chương trình đổ bóng mảnh thành một vùng đệm khung hình được gọi là kết hợp nguồn kép. Kỹ thuật này đặc biệt hữu ích cho các ứ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ư các thao tác dựa trên 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 nguồn kép 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: "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 tiế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 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 hiệu quả và dễ bảo trì hơn, cuối cùng 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 MSL.

Sơ đồ quy trình cho thấy quá trình chuyển đổi mã chương trình đổ bóng WGSL thành hướng 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 (hiện đã có trên Android và ChromeOS) đang được mở rộng dần sang các thiết bị macOS hỗ trợ WebGPU bằng phần phụ trợ Metal. Xem vấn đề 42251016.

Ngừng sử dụng GPUAdapter requestAdapterInfo()

Phương thức không đồng bộ requestAdapterInfo() của GPUAdapter là thừa vì nhà phát triển đã có thể đồng bộ lấy GPUAdapterInfo bằng cách sử dụng thuộc tính GPUAdapter info. Do đó, phương thức requestAdapterInfo() GPUAdapter không chuẩn hiện không còn đượ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 về việc ngừng sử dụng 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ề Dawn

API C webgpu.h đã xác định một số quy ước đặt tên cho các cấu trúc mở rộng. Xem các thay đổi 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 tốt 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

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 thay đổi.

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