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 kết quả đầu ra của chương trình đổ bóng mảnh vào một vùng đệm khung đượ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 phối và các yếu tố pha trộn 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 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ần phụ trợ của Metal, sẽ giúp trình biên dịch trở nên 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 chuyển đổi mã chương trình đổ bóng WGSL thành các lệnh cung cấp 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 vốn đã có trên Android và ChromeOS, đang dần được mở rộng sang các thiết bị macOS có hỗ trợ WebGPU với phần phụ trợ Metal. Hãy 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 mục ý định không dùng nữa.

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 đối với 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.

Cập nhật 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 mở rộng. Hãy xem những thay đổi sau đây về tên 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

Bài viết này chỉ đề cập đến một số điểm nổi bật chính. Hãy xem danh sách các thay đổi đầy đủ.

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