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"
và "one-minus-src1-alpha"
. Hãy xem đoạn mã sau, mục chromestatus và vấ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.
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.
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
- Kết hợp nguồn kép
- Cải thiện thời gian biên dịch chương trình đổ bóng trên Metal
- Ngừng sử dụng GPUAdapter requestAdapterInfo()
- Thông tin cập nhật về bình minh
Chrome 129
- Hỗ trợ HDR với chế độ ánh xạ tông màu canvas
- Mở rộng tính năng hỗ trợ nhóm con
- Thông tin cập nhật về bình minh
Chrome 128
- Thử nghiệm với các nhóm con
- Ngừng sử dụng tính năng đặt độ lệch sâu cho các đường và điểm
- Ẩn cảnh báo Công cụ cho nhà phát triển về lỗi không được ghi lại nếu preventDefault
- WGSL nội suy lấy mẫu trước và
- Thông tin cập nhật về Dawn
Chrome 127
- Hỗ trợ thử nghiệm cho OpenGL ES trên Android
- Thuộc tính thông tin GPUAdapter
- Cải thiện khả năng tương tác WebAssembly
- Cải thiện lỗi bộ mã hoá lệnh
- Thông tin cập nhật về Dawn
Chrome 126
- Tăng giới hạn maxTextureArrayLayers
- Tối ưu hoá quá trình tải vùng đệm lên cho phần phụ trợ Vulkan
- Cải thiện thời gian biên dịch đổ bóng
- Vùng đệm lệnh đã gửi phải là duy nhất
- Thông tin cập nhật về Dawn
Chrome 125
- Nhóm con (tính năng đang được phát triển)
- Hiển thị lát cắt của hoạ tiết 3D
- Thông tin cập nhật về bình minh
Chrome 124
- Kết cấu bộ nhớ chỉ đọc và đọc-ghi
- Hỗ trợ worker và worker dùng chung
- Các thuộc tính thông tin mới của bộ chuyển đổi
- Sửa lỗi
- Thông tin cập nhật về Dawn
Chrome 123
- Hỗ trợ các hàm tích hợp DP4a trong WGSL
- Tham số con trỏ không bị hạn chế trong WGSL
- Cú pháp đơn giản để huỷ tham chiếu các thành phần kết hợp trong WGSL
- Trạng thái chỉ có thể đọc riêng biệt cho các khía cạnh độ sâu và bản in
- Thông tin cập nhật về bình minh
Chrome 122
- Mở rộng phạm vi tiếp cận bằng chế độ tương thích (tính năng đang trong quá trình phát triển)
- Tăng giới hạn maxVertexAttributes
- Thông tin cập nhật về Dawn
Chrome 121
- Hỗ trợ WebGPU trên Android
- Sử dụng DXC thay vì FXC để biên dịch chương trình đổ bóng trên Windows
- Truy vấn dấu thời gian trong các lượt kết xuất và kết xuất
- Điểm truy cập mặc định đến mô-đun chương trình đổ bóng
- Hỗ trợ display-p3 dưới dạng hệ màu GPUExternalTexture
- Thông tin về vùng nhớ khối xếp bộ nhớ
- Thông tin cập nhật về Dawn
Chrome 120
- Hỗ trợ giá trị dấu phẩy động 16 bit trong WGSL
- Vượt giới hạn
- Thay đổi đối với trạng thái chiều sâu-khung đệm
- Cập nhật thông tin về bộ chuyển đổi
- Định lượng truy vấn dấu thời gian
- Tính năng dọn dẹp vào mùa xuân
Chrome 119
- Hoạ tiết dấu phẩy động 32 bit có thể lọc
- định dạng đỉnh unorm10-10-10-2
- định dạng hoạ tiết rgb10a2uint
- Thông tin cập nhật về Dawn
Chrome 118
- Hỗ trợ HTMLImageElement và ImageData trong
copyExternalImageToTexture()
- Hỗ trợ thử nghiệm cho hoạ tiết lưu trữ chỉ đọc-ghi và chỉ đọc
- Thông tin cập nhật về bình minh
Chrome 117
- Huỷ đặt vùng đệm đỉnh
- Huỷ đặt nhóm liên kết
- Tắt tiếng lỗi của quá trình tạo quy trình không đồng bộ khi mất thiết bị
- Thông tin cập nhật về quá trình tạo mô-đun chương trình đổ bóng SPIR-V
- Cải thiện trải nghiệm của nhà phát triển
- Lưu quy trình vào bộ nhớ đệm với bố cục được tạo tự động
- Thông tin cập nhật về bình minh
Chrome 116
- Tích hợp WebCodecs
- Thiết bị bị mất do GPUAdapter
requestDevice()
trả về - Giữ cho quá trình phát video diễn ra mượt mà nếu
importExternalTexture()
được gọi - Tuân thủ quy cách
- Cải thiện trải nghiệm của nhà phát triển
- Thông tin cập nhật về bình minh
Chrome 115
- Các tiện ích ngôn ngữ WGSL được hỗ trợ
- Hỗ trợ thử nghiệm cho Direct3D 11
- Sử dụng GPU rời theo mặc định khi dùng nguồn điện xoay chiều
- Cải thiện trải nghiệm của nhà phát triển
- Thông tin cập nhật về Dawn
Chrome 114
- Tối ưu hoá JavaScript
- getCurrentTexture() trên canvas chưa định cấu hình gửi InvalidStateError
- Nội dung cập nhật về WGSL
- Thông tin cập nhật về Dawn