双来源混合
将两个 fragment 着色器输出合并到单个帧缓冲区中称为双源混合。此技术对于需要执行复杂混合操作的应用特别有用,例如基于 Porter-Duff 混合模式的应用。通过将后续渲染传递替换为单个渲染传递,双源混合可以提高性能和灵活性。
借助新的 "dual-source-blending"
WebGPU 功能,您可以在 @location(0)
中使用 WGSL @blend_src
属性来表示混合源索引和以下混合因子:"src1"
、"one-minus-src1"
、"src1-alpha"
和 "one-minus-src1-alpha"
。请参阅以下代码段、chromestatus 条目和问题 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...
缩短了 Metal 的着色器编译时间
Chrome 团队正在为通过 Metal 后端支持 WebGPU 的设备引入中间表示法 (IR),从而增强 WebGPU 着色器语言编译器 Tint。此 IR 位于 Tint 的抽象语法树 (AST) 和 Metal 后端写入程序之间,将使编译器更高效且更易于维护,最终使开发者和用户都受益。初始测试表明,在将 Unity 的 WGSL 着色器转换为 MSL 时,新版本的 Tint 的速度最高提高了 10 倍。
这些改进已在 Android 和 ChromeOS 上推出,并且正在逐步扩展至支持带有 Metal 后端的 WebGPU 的 macOS 设备。请参阅问题 42251016。
弃用了 GPUAdapter requestAdapterInfo()
GPUAdapter requestAdapterInfo()
异步方法是多余的,因为开发者已经可以使用 GPUAdapter info
属性同步获取 GPUAdapterInfo。因此,非标准 GPUAdapter requestAdapterInfo()
方法现已废弃。请参阅要弃用的 intent。
Dawn 更新
webgpu.h C API 为扩展结构体定义了一些命名惯例。请参阅以下名称变更和问题 42241174。
WGPURenderPassDescriptor 扩展程序
|
|
WGPURenderPassDescriptorMaxDrawCount ->
|
WGPURenderPassMaxDrawCount
|
WGPUShaderModuleDescriptor 扩展程序
|
|
WGPUShaderModuleSPIRVDescriptor ->
|
WGPUShaderSourceSPIRV
|
WGPUShaderModuleWGSLDescriptor ->
|
WGPUShaderSourceWGSL
|
WGPUSurfaceDescriptor 个扩展程序
|
|
WGPUSurfaceDescriptorFromMetalLayer ->
|
WGPUSurfaceSourceMetalLayer
|
WGPUSurfaceDescriptorFromWindowsHWND ->
|
WGPUSurfaceSourceWindowsHWND
|
WGPUSurfaceDescriptorFromXlibWindow ->
|
WGPUSurfaceSourceXlibWindow
|
WGPUSurfaceDescriptorFromWaylandSurface ->
|
WGPUSurfaceSourceWaylandSurface
|
WGPUSurfaceDescriptorFromAndroidNativeWindow ->
|
WGPUSurfaceSourceAndroidNativeWindow
|
WGPUSurfaceDescriptorFromXcbWindow ->
|
WGPUSurfaceSourceXCBWindow
|
WGPUSurfaceDescriptorFromCanvasHTMLSelector ->
|
WGPUSurfaceSourceCanvasHTMLSelector_Emscripten
|
WGPUDepthStencilState
的 depthWriteEnabled
属性类型从布尔值切换为 WGPUOptionalBool
,以更好地反映其三种可能的状态(true、false 和 undefined),就像在 JavaScript API 中一样。如需了解详情,请参阅以下代码段和 webgpu-headers PR。
wgpu::DepthStencilState depthStencilState = {};
depthStencilState.depthWriteEnabled = wgpu::OptionalBool::True; // Undefined by default
本文仅介绍了一些主要亮点。查看详尽的提交内容列表。
WebGPU 中的新变化
WebGPU 新变化系列涵盖的所有内容的列表。
Chrome 130
Chrome 129
Chrome 128
Chrome 127
Chrome 126
Chrome 125
Chrome 124
Chrome 123
Chrome 122
Chrome 121
- 在 Android 上支持 WebGPU
- 在 Windows 上使用 DXC 而非 FXC 进行着色器编译
- 计算通道和渲染通道中的时间戳查询
- 着色器模块的默认入口点
- 支持 display-p3 作为 GPUExternalTexture 颜色空间
- 内存堆信息
- Dawn 最新动态
Chrome 120
Chrome 119
Chrome 118
Chrome 117
Chrome 116
- WebCodecs 集成
- GPUAdapter 返回的设备丢失
requestDevice()
- 如果调用
importExternalTexture()
,则保持视频播放流畅 - 规范合规性
- 改善开发者体验
- Dawn 最新动态