相关文章推荐
憨厚的仙人掌  ·  Android TabLayout ...·  2 年前    · 

经过多年的开发,Chrome 团队宣布,WebGPU 的第一个版本现已在 ChromeOS、macOS 和 Windows 上的 Chrome 中默认提供。如需了解详情,请参阅 Chrome 发布 WebGPU

我们还开始在 MDN 上添加 有关 WebGPU 的全面文档

还有更多惊喜等你体验!

importExternalTexture() 中使用 WebCodecs VideoFrame

WebGPU 公开了一个 API,用于通过 importExternalTexture() HTMLVideoElement 创建不透明的“外部纹理”对象。您可以使用这些对象高效地对视频帧进行采样,可能直接从源 YUV 数据以零复制方式进行采样。

不过,最初的 WebGPU 规范不允许通过 WebCodecs VideoFrame 对象创建 GPUExternalTexture 对象。对于已经在使用 WebCodecs 且希望将 WebGPU 集成到视频处理流水线中的高级视频处理应用,此功能非常重要。目前,我们正在 gpuweb/gpuweb#1380 问题中进行讨论。

启用该功能

默认情况下,Chrome 中不会启用此 功能 ,但您可以通过明确启用此功能,在 Chrome 113 中对其进行试用。您可以在本地启用该功能,方法是启用 chrome://flags/#enable-webgpu-developer-features 中的“WebGPU 开发者功能” 标志

为了面向应用的所有访问者启用该功能,我们目前正在进行 源代码试用 ,该试用将在 Chrome 118(2023 年 12 月 8 日)中结束。如需参与试用,请报名,然后在 HTML 或 HTTP 标头中添加包含来源试用令牌的元元素。如需了解详情,请参阅 开始使用来源试用 一文。

// Access the GPU device.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
// Create VideoFrame from HTMLVideoElement.
const video = document.querySelector("video");
const videoFrame = new VideoFrame(video);
const texture = device.importExternalTexture({ source: videoFrame });
// TODO: Use texture in bind group creation.

查看使用 WebCodecs 上传视频实验示例,试用一下。

WebGPU 中的新变化

WebGPU 新变化系列中涵盖的所有内容的列表。

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 对齐规则变更
  • 使用舍弃功能提升 WGSL 性能
  • 为外部纹理使用 VideoFrame displaySize
  • 使用 copyExternalImageToTexture 处理非默认方向的图片
  • 改进开发者体验
  • 使用 featureLevel 启用兼容模式
  • 清理实验性子群组功能
  • 废弃了 maxInterStageShaderComponents 限制
  • Dawn 更新
  • Chrome 132

  • TextureView 用法
  • 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

  • 只读和读写存储纹理
  • 服务工件和共享工件支持
  • 新的适配器信息属性
  • 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

  • 取消设置顶点缓冲区
  • 取消设置绑定组
  • 在设备丢失时,忽略异步流水线创建错误
  • SPIR-V 着色器模块创建更新
  • 改进开发者体验
  • 使用自动生成的布局缓存流水线
  • Dawn 更新
  • Chrome 116

  • WebCodecs 集成
  • GPUAdapter requestDevice() 返回的丢失设备
  • 在调用 importExternalTexture() 时保持视频流畅播放
  • 规范合规性
  • 改进开发者体验
  • Dawn 更新
  • Chrome 115

  • 支持的 WGSL 语言扩展
  • 对 Direct3D 11 的实验性支持
  • 在使用交流电源时默认获取独立显卡
  • 改进开发者体验
  • Dawn 更新
  • Chrome 114

  • 优化 JavaScript
  • 对未配置的画布使用 getCurrentTexture() 会抛出 InvalidStateError
  • WGSL 更新
  • Dawn 更新
  • Chrome 113

  • importExternalTexture() 中使用 WebCodecs VideoFrame 源
  • 如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。

    最后更新时间 (UTC):2023-04-26。

    [[["易于理解","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):2023-04-26。"],[],[]]