添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

新增了 unorm8x4-bgra 和 1 分量顶点格式

添加了 "unorm8x4-bgra" 顶点格式和以下 1 分量顶点格式: "uint8" "sint8" "unorm8" "snorm8" "uint16" "sint16" "unorm16" "snorm16" "float16" "unorm8x4-bgra" 顶点格式可让您在保持相同着色器的同时,更轻松地加载以 BGRA 编码的顶点颜色。此外,1 分量顶点格式让您可以仅请求必要的数据,而之前对于 8 位和 16 位数据类型,至少需要请求两倍的数据。请参阅 chromestatus 条目 问题 376924407

允许使用未定义的值请求未知限制

为了使 WebGPU API 在发展过程中不那么脆弱,您现在可以在请求 GPU 设备时使用 undefined 值请求未知限制。例如,在以下应用代码中,如果 someLimit 不再存在, adapter.limits.someLimit 可以是 undefined 。请参阅 规范 PR 4781

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 编译器之间差异的示例代码。

使用 discard 提升 WGSL 性能

由于在渲染复杂的屏幕空间反射 (SSR) 效果时观察到性能显著下降,discard 语句的实现使用平台提供的语义来降级为辅助函数调用(如果可用)。这可提升使用 discard 的着色器的性能。请参阅问题 372714384

针对外部纹理使用 VideoFrame displaySize

根据 WebGPU 规范,导入 VideoFrame 时,displayWidthdisplayHeight 维度应作为 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。"],[],[]]