const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice({
requiredLimits: { someLimit: adapter.limits.someLimit }, // someLimit can be undefined
WGSL 对齐规则变更
现在,对于结构体成员,不再可能提供过小的对齐值,因为现在要求对于所有结构体,@align(n) 必须能整除 RequiredAlignOf。这项重大变更简化了 WGSL 语言的使用,并使其与 Firefox 和 Safari 更加兼容。您可以在 spec PR 中找到显示 Tint、Naga 和 WebKit 编译器之间差异的示例代码。
由于在渲染复杂的屏幕空间反射 (SSR) 效果时观察到性能显著下降,discard 语句的实现使用平台提供的语义来降级为辅助函数调用(如果可用)。这可提升使用 discard 的着色器的性能。请参阅问题 372714384。
针对外部纹理使用 VideoFrame displaySize
根据 WebGPU 规范,导入 VideoFrame 时,displayWidth 和 displayHeight 维度应作为 GPUExternalTexture 的表观大小。但是,系统错误地使用了可见大小,导致尝试在 GPUExternalTexture 上使用 textureLoad() 时出现问题。该问题现已解决。请参阅问题 377574981。
使用 copyExternalImageToTexture 处理具有非默认方向的图片
copyExternalImageToTexture() GPUQueue 方法用于将图片或画布的内容复制到纹理中。现在可以正确处理具有非默认方向的图片。之前,如果来源是 imageOrientation "from-image" 的 ImageBitmap 或具有非默认方向的图片,则不会出现这种情况。请参阅问题 384858956。
改善开发者体验
当 adapter.limits 显示较高的值时,您可能会感到意外,但您可能没有意识到,在请求 GPU 设备时,您需要明确申请更高的限制。否则,日后可能会意外达到限制。
为了帮助您解决此问题,我们扩展了错误消息,其中包含提示,告知您在调用 requestDevice() 时,如果未在 requiredLimits 中指定限额,则需要明确请求更高的限额。请参阅问题 42240683。
以下示例展示了在创建大小超出默认最大缓冲区大小设备限制的 GPU 缓冲区时,开发者工具控制台中记录的改进版错误消息。
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
// Create a GPU buffer with a size exceeding the default max buffer size device limit.
const size = device.limits.maxBufferSize + 1;
const buffer = device.createBuffer({ size, usage: GPUBufferUsage.MAP_READ });
device.queue.submit([]);
⚠️ Buffer size (268435457) exceeds the max buffer size limit (268435456). This adapter supports a higher maxBufferSize of 4294967296, which can be specified in requiredLimits when calling requestDevice(). Limits differ by hardware, so always check the adapter limits prior to requesting a higher limit.
- While calling [Device].CreateBuffer([BufferDescriptor]).
启用具有 featureLevel 的兼容模式
现在,通过将标准化的 featureLevel 选项设置为 "compatibility",即可在实验性兼容模式下请求 GPU 适配器。仅允许使用 "core"(默认)和 "compatibility" 字符串。请参阅以下示例和规范 PR 4897。
// Request a GPU adapter in compatibility mode
const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });
if (adapter?.featureLevel === "compatibility") {
// Any devices created from this adapter will support only compatibility mode.
featureLevel 选项取代了非标准化的 compatibilityMode 选项,而非标准化的 featureLevel 属性取代了 isCompatibilityMode 属性。
由于它仍处于实验阶段,因此您目前需要在 chrome://flags/#enable-unsafe-webgpu 中运行 Chrome 并添加“不安全的 WebGPU 支持”标志。您可以访问 webgpureport.org 来体验一下。
清理实验性子群组功能
移除了已弃用的 "chromium-experimental-subgroups" 和 "chromium-experimental-subgroup-uniform-control-flow" 实验性子群组功能。请参阅问题 377868468。
现在,您只需使用 "subgroups" 实验性功能,即可尝试使用子群组。"subgroups-f16" 实验性功能已弃用,很快就会被移除。如果您的应用同时请求 "shader-f16" 和 "subgroups" 特征,则可以使用具有子组的 f16 值。请参阅问题 380244620。
弃用 maxInterStageShaderComponents 限制
由于多种因素,maxInterStageShaderComponents 限制已被弃用:
使用 maxInterStageShaderVariables 实现冗余:此限制已达到类似目的,即控制着着色器阶段之间传递的数据量。
细微的差异:虽然这两个限制的计算方式略有不同,但这些差异很小,可以在 maxInterStageShaderVariables 限制范围内有效管理。
简化:移除 maxInterStageShaderComponents 可简化着色器接口并降低开发者的复杂性。这样一来,他们就无需管理两个细微差别很大的单独限制,而是可以专注于名称更恰当且更全面的 maxInterStageShaderVariables。
我们的目标是在 Chrome 135 中完全移除它。请参阅弃用意向和问题 364338810。
“黎明”更新
借助 wgpu::Device::GetAdapterInfo(adapterInfo),您可以直接从 wgpu::Device 获取适配器信息。请参阅问题 376600838。
已将 WGPUProgrammableStageDescriptor 结构体重命名为 WGPUComputeState,以使计算状态与顶点和 fragment 状态保持一致。请参阅问题 379059434。
已移除 wgpu::VertexStepMode::VertexBufferNotUsed 枚举值。现在可以使用 {.stepMode=wgpu::VertexStepMode::Undefined, .attributeCount=0} 表示未使用的顶点缓冲区布局。请参阅问题 383147017。
以下仅介绍了一些关键亮点。查看详尽的提交列表。
WebGPU 最新动态
WebGPU 的新变化系列中涵盖的所有内容。
Chrome 146
在 OpenGL ES 3.1 上支持 WebGPU 兼容模式
WGSL texture_and_sampler_let
Dawn 更新
Chrome 145
WGSL subgroup_uniformity 扩展程序
工作器中的实验性同步缓冲区映射
Dawn 更新
Chrome 144
WGSL subgroup_id 扩展程序
WGSL uniform_buffer_standard_layout 扩展程序
Linux 上的 WebGPU
更快的 writeBuffer 和 writeTexture
Dawn 更新
Chrome 143
纹理组件混色
移除 bgra8unorm 只读存储纹理使用情况
Dawn 更新
Chrome 142
扩展了纹理格式支持功能
WGSL 中的图元索引
Dawn 更新
Chrome 141
Tint IR 已完成
WGSL 编译器中的整数范围分析
针对 Vulkan 后端的 SPIR-V 1.4 更新
Dawn 更新
Chrome 140
设备请求会消耗适配器
使用纹理视图时使用纹理的简写形式
WGSL textureSampleLevel 支持一维纹理
弃用 bgra8unorm 只读存储纹理用法
移除 GPUAdapter isFallbackAdapter 属性
Dawn 更新
Chrome 139
支持 BC 和 ASTC 压缩格式的 3D 纹理
新增了“核心功能和限制”功能
WebGPU 兼容性模式的源试用
Dawn 更新
Chrome 138
将缓冲区用作绑定资源的简写形式
创建时映射的缓冲区的尺寸要求变更
最新 GPU 的架构报告
弃用 GPUAdapter isFallbackAdapter 属性
Dawn 更新
Chrome 137
使用纹理视图进行 externalTexture 绑定
复制缓冲区,但不指定偏移量和大小
使用指向原子变量的指针的 WGSL workgroupUniformLoad
GPUAdapterInfo powerPreference 属性
移除 GPURequestAdapterOptions compatibilityMode 属性
Dawn 更新
Chrome 136
GPUAdapterInfo isFallbackAdapter 属性
改进了 D3D12 上的着色器编译时间
保存和复制画布图片
提升效果兼容性模式限制
Dawn 更新
Chrome 135
允许创建具有 null bind 组布局的流水线布局
允许视口超出渲染目标边界
更轻松地访问 Android 上的实验性兼容性模式
移除 maxInterStageShaderComponents 限制
Dawn 更新
Chrome 134
利用子群组改进机器学习工作负载
移除对可混合的浮点可过滤纹理类型的支持
Dawn 更新
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()
点和线图元不得具有深度偏移
子群组的包含性扫描内置函数
对多重绘制间接的实验性支持
着色器模块编译选项“严格数学”
移除 GPUAdapter requestAdapterInfo()
Dawn 更新
Chrome 130
双来源混合
Metal 上的着色器编译时间缩短
弃用 GPUAdapter requestAdapterInfo()
Dawn 更新
Chrome 129
支持 HDR,并采用画布色调映射模式
支持更多子群组
Dawn 更新
Chrome 128
使用子群组进行实验
弃用为线和点设置深度偏差
如果 preventDefault,则隐藏未捕获的错误开发者工具警告
WGSL 先进行插值采样,然后
Dawn 更新
Chrome 127
在 Android 上对 OpenGL ES 的实验性支持
GPUAdapter info 属性
WebAssembly 互操作改进
改进了命令编码器错误
Dawn 更新
Chrome 126
提高 maxTextureArrayLayers 限制
针对 Vulkan 后端的缓冲区上传优化
着色器编译时间改进
提交的命令缓冲区必须是唯一的
Dawn 更新
Chrome 125
子群组(正在开发的功能)
渲染到 3D 纹理的切片
Dawn 更新
Chrome 124
只读和读写存储纹理
支持 Service Worker 和 Shared Worker
新的适配器信息属性
bug 修复
Dawn 更新
Chrome 123
WGSL 中的 DP4a 内置函数支持
WGSL 中的不受限指针形参
用于在 WGSL 中取消引用复合类型的语法糖
为模板和深度方面分别设置只读状态
Dawn 更新
Chrome 122
通过兼容模式扩大覆盖面(功能正在开发中)
提高 maxVertexAttributes 限制
Dawn 更新
Chrome 121
在 Android 上支持 WebGPU
在 Windows 上使用 DXC 而不是 FXC 进行着色器编译
计算和渲染通道中的时间戳查询
着色器模块的默认入口点
支持将 display-p3 用作 GPUExternalTexture 色彩空间
内存堆信息
Dawn 更新
Chrome 120
支持 WGSL 中的 16 位浮点值
深度模具状态的更改
适配器信息更新
时间戳查询量化
春季大清理功能
Chrome 119
可过滤的 32 位浮点纹理
unorm10-10-10-2 顶点格式
rgb10a2uint 纹理格式
Dawn 更新
Chrome 118
copyExternalImageToTexture() 中对 HTMLImageElement 和 ImageData 的支持
对读写和只读存储纹理的实验性支持
Dawn 更新
Chrome 117
未设置顶点缓冲区
取消设置 bind 组
在设备丢失时,禁止显示异步流水线创建错误
SPIR-V 着色器模块创建更新
改善开发者体验
具有自动生成的布局的缓存流水线
Dawn 更新
Chrome 116
WebCodecs 集成
由 GPUAdapter requestDevice() 返回的丢失设备
在调用 importExternalTexture() 时保持视频播放流畅
规范一致性
改善开发者体验
Dawn 更新
Chrome 115
支持的 WGSL 语言扩展程序
对 Direct3D 11 的实验性支持
在交流电源供电时默认获取独立 GPU
改善开发者体验
Dawn 更新
Chrome 114
优化 JavaScript
未配置的画布上的 getCurrentTexture() 会抛出 InvalidStateError
WGSL 更新
Dawn 更新
Chrome 113
在 importExternalTexture() 中使用 WebCodecs VideoFrame 来源
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-01-29。
[[["易于理解","easyToUnderstand","thumb-up"],["解决了我的问题","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["没有我需要的信息","missingTheInformationINeed","thumb-down"],["太复杂/步骤太多","tooComplicatedTooManySteps","thumb-down"],["内容需要更新","outOfDate","thumb-down"],["翻译问题","translationIssue","thumb-down"],["示例/代码问题","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["最后更新时间 (UTC):2025-01-29。"],[],[]]