经过多年的发展,Chrome 团队发布 WebGPU
几天前 谷歌揭幕 通过一个宣布 默认支持 WebGPU 图形 API 和 WebGPU 着色语言 (WGSL) 在 Chrome 113 分支,计划于 2 月 XNUMX 日发布。
对于那些不了解 WebGPU 的人,您应该知道 提供类似于 Vulkan、Metal 和 Direct3D 12 的 API 执行 GPU 端操作,例如渲染和计算,以及 允许使用着色器语言编写 GPU 端程序.
关于WebGPU
从概念上讲 WebGPU 不同于 WebGL 的方式与 Vulkan 图形 API 不同于 OpenGL 的方式相同, 但是 WebGPU 不是基于特定的图形 API,而是一个通用层,使用与 Vulkan 中相同的低级原语。 金属和 Direct3D。 网络图形处理器 为 JavaScript 应用程序提供对组织的低级控制, 处理命令并将其传输到 GPU,管理相关资源、内存、缓冲区、纹理对象和编译的图形着色器。 这种方法允许您通过减少开销和提高 GPU 效率来实现更高性能的图形应用程序。
网络GPU 允许您为网络创建复杂的3D项目 与直接使用 Vulkan、Metal 或 Direct3D 的独立程序一样工作,但不依赖于特定平台。 WebGPU 还提供了用于移植本机图形程序的附加选项 通过在 WebAssembly 中编译,生成支持 Web 的表单。 除了 3D 图形之外,WebGPU 还涵盖了与将计算卸载到 GPU 端和运行着色器相关的可能性。
在 WebGPU 的主要特性中,我们可以强调以下几点:
- 分离管理资源、准备工作和命令传输 到 GPU(在 WebGL 中,一个对象同时负责所有事情)。 提供了三个独立的上下文: GPUDevice 用于创建纹理和缓冲区等资源; GPUCommandEncoder 对单个命令进行编码,包括处理和计算阶段; GPUCommandBuffer 传递给 GPU 执行队列。
结果可以在与一个或多个画布项目关联的区域中呈现,或者在没有输出的情况下呈现(例如,在运行计算任务时)。 暂存可以轻松地将资源创建和配置操作分离到可以在不同线程上运行的不同控制器中。 - 一种不同的状态处理方法。 WebGPU 提供了两个对象,GPURenderPipeline 和 GPUComputePipeline,它们允许您组合开发人员预定义的不同状态,从而使浏览器不会将资源浪费在额外的工作上,例如重新编译着色器。 支持的状态包括:着色器、顶点缓冲区和属性布局、固定组布局、混合、深度和图案、渲染后输出格式。
- 绑定模型,很像 Vulkan 的资源池工具. 为了将资源分组,WebGPU 提供了一个 GPUBindGroup 对象,该对象可以绑定到其他类似对象,以便在命令记录期间在着色器中使用。
创建此类组允许控制器提前执行必要的准备操作,并允许浏览器更快地在绘制调用之间切换资源绑定。 可以使用 GPUBindGroupLayout 对象预定义资源绑定的布局。
除了铬, 实验性 WebGPU 支持自 2020 年 XNUMX 月起已在 Firefox 中进行测试 从 2021 年 XNUMX 月起在 Safari 上。 要在 Firefox 中启用 WebGPU,您必须在 about:config 中设置 dom.webgpu.enabled 和 gfx.webgpu.force-enabled 标志。
目前还没有在 Firefox 和 Safari 中默认启用 WebGPU 的计划。 为 Firefox 和 Chrome 开发的 WebGPU 实现可作为单独的库使用:Dawn (C++) 和 wgpu (Rust),您可以使用它们将 WebGPU 支持集成到您的应用程序中。
另外值得注意的是,正在努力将 WebGPU 支持添加到本地使用 WebGL 的流行 JavaScript 库。 例如,完整的 WebGPU 支持已在 Babylon.js 中声明,部分支持在 Three.js、PlayCanvas 和 TensorFlow.js 中声明。
实施 WebGPU 最初只会在 ChromeOS、macOS 和 Windows 的构建中启用, 而对于 Linux 和 Android,WebGPU 支持将在稍后激活。
最后,如果你有兴趣了解更多,可以咨询详情 在下面的链接中。
成为第一个发表评论