只读和读写存储纹理
存储纹理绑定类型允许着色器从存储纹理读取数据,而无需添加 TEXTURE_BINDING 用法,并对某些格式执行混合读取和写入操作。当 "readonly_and_readwrite_storage_textures" WGSL 语言扩展 存在于 navigator.gpu.wgslLanguageFeatures 中时,您现在可以在创建绑定组布局时将 GPUStorageTexture 访问权限设置为 "read-write" 或 "read-only"。之前,此权限仅限于 "write-only"。
然后,您的 WGSL 着色器代码可以使用 read_write 和 read 访问权限限定符来访问存储纹理,textureLoad() 和 textureStore() 内置函数会相应地运行,并且提供了一个新的 textureBarrier() 内置函数,用于同步工作组中的纹理内存访问。
建议您使用 requires 指令 来表明可能存在不可移植性,方法是在 WGSL 着色器代码的顶部添加 requires readonly_and_readwrite_storage_textures;。请参阅以下示例和问题 dawn:1972。
if (!navigator.gpu.wgslLanguageFeatures.has("readonly_and_readwrite_storage_textures")) {
throw new Error("Read-only and read-write storage textures are not available");
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const bindGroupLayout = device.createBindGroupLayout({
entries: [{
binding: 0,
visibility: GPUShaderStage.COMPUTE,
storageTexture: {
access: "read-write", // <-- New!
format: "r32uint",
},
}],
});
const shaderModule = device.createShaderModule({ code: `
requires readonly_and_readwrite_storage_textures;
@group(0) @binding(0) var tex : texture_storage_2d<r32uint, read_write>;
@compute @workgroup_size(1, 1)
fn main(@builtin(local_invocation_id) local_id: vec3u) {
var data = textureLoad(tex, vec2i(local_id.xy));
data.x *= 2;
textureStore(tex, vec2i(local_id.xy), data);
}`
});
// You can now create a compute pipeline with this shader module and
// send the appropriate commands to the GPU.
支持 Service Worker 和 Shared Worker
Chrome 中的 WebGPU 将 Web Worker 支持提升到了新的水平,现在同时支持 Service Worker 和 Shared Worker。您可以使用 Service Worker 来增强后台任务和离线功能,并使用 Shared Worker 在脚本之间高效共享资源。请参阅问题 chromium:41494731。
请查看 Chrome 扩展程序示例和 WebLLM Chrome 扩展程序,了解如何在扩展程序 Service Worker 中使用 WebGPU。
新的适配器信息属性
如果用户在 chrome://flags/#enable-webgpu-developer-features 处启用了“WebGPU 开发者功能” 标志,则在调用 requestAdapterInfo() 时,现在可以使用非标准 d3dShaderModel 和 vkDriverVersion 适配器信息属性。如果支持:
d3dShaderModel是支持的 D3D 着色器模型编号上限。例如,值 62 表示当前驱动程序支持 HLSL SM 6.2。请参阅 文档 和 问题 dawn:1254。vkDriverVersion是供应商指定的 Vulkan 驱动程序版本号。请参阅 文档 和 问题 chromium:327457605。
vkDriverVersion 显示在https://webgpureport.org 上。问题修复
使用 layout: "auto" 创建两个具有匹配绑定组的流水线,然后使用第一个流水线创建绑定组,并在第二个流水线上使用该绑定组,现在会引发 GPUValidationError。允许这样做是一个实现 bug,现在已通过适当的 测试 修复。请参阅问题 dawn:2402。
Dawn 更新
在 Dawn API 中,使用 wgpuDeviceSetUncapturedErrorCallback 设置的未捕获错误回调现在不会在 GPU
设备丢失后调用。此修复程序使 Dawn 与 JavaScript API 规范和 Blink 的实现保持一致。请参阅问题
dawn:2459。
这仅涵盖了一些关键亮点。请查看提交的完整列表。
WebGPU 的新变化
列出了“WebGPU 的新变化”系列中涵盖的所有内容。
Chrome 147-148
Chrome 146
Chrome 145
Chrome 144
- WGSL subgroup_id 扩展
- WGSL uniform_buffer_standard_layout 扩展
- Linux 上的 WebGPU
- 更快的 writeBuffer 和 writeTexture
- Dawn 更新
Chrome 143
Chrome 142
Chrome 141
Chrome 140
- 设备请求会消耗适配器
- 使用纹理(使用纹理视图)的简写
- WGSL textureSampleLevel 支持 1D 纹理
- 弃用 bgra8unorm 只读存储纹理用法
- 移除 GPUAdapter isFallbackAdapter 属性
- Dawn 更新
Chrome 139
Chrome 138
Chrome 137
- 将纹理视图用于 externalTexture 绑定
- 复制缓冲区,无需指定偏移量和大小
- WGSL workgroupUniformLoad 使用指向原子的指针
- GPUAdapterInfo powerPreference 属性
- 移除 GPURequestAdapterOptions compatibilityMode 属性
- Dawn 更新
Chrome 136
Chrome 135
- 允许使用 null 绑定组布局创建流水线布局
- 允许视口超出渲染目标边界
- 更轻松地访问 Android 上的实验性兼容模式
- 移除 maxInterStageShaderComponents 限制
- Dawn 更新
Chrome 134
Chrome 133
- 新增 unorm8x4-bgra 和 1 组件顶点格式
- 允许使用未定义的值请求未知限制
- WGSL 对齐规则变更
- 使用 discard 提升 WGSL 性能
- 将 VideoFrame displaySize 用于外部纹理
- 使用 copyExternalImageToTexture 处理具有非默认方向的图片
- 提升开发者体验
- 使用 featureLevel 启用兼容模式
- 实验性子群组功能清理
- 弃用 maxInterStageShaderComponents 限制
- Dawn 更新
Chrome 132
- 纹理视图用法
- 32 位浮点纹理混合
- GPUDevice adapterInfo 属性
- 使用无效格式配置画布上下文会抛出 JavaScript 错误
- 对纹理的过滤采样器限制
- 扩展的子群组实验
- 提升开发者体验
- 实验性支持 16 位标准化纹理格式
- Dawn 更新
Chrome 131
- WGSL 中的剪辑距离
- GPUCanvasContext getConfiguration()
- 点和线基元不得具有深度偏差
- 子群组的包含扫描内置函数
- 实验性支持多重间接绘制
- 着色器模块编译选项 strict math
- 移除 GPUAdapter requestAdapterInfo()
- Dawn 更新
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
- copyExternalImageToTexture()
copyExternalImageToTexture()中支持 HTMLImageElement 和 ImageData - 实验性支持读写和只读存储纹理
- Dawn 更新
Chrome 117
Chrome 116
- WebCodecs 集成
- GPUAdapter
requestDevice()返回的丢失设备 - 如果调用
importExternalTexture(),则保持视频播放流畅 - 规范一致性
- 提升开发者体验
- Dawn 更新
Chrome 115
Chrome 114
Chrome 113
- 在
importExternalTexture()中使用 WebCodecs VideoFrame 来源