W3C 公布 WebGPU 标准草案

W3C 发布了 WebGPU 和 WebGPU 着色语言 (WGSL) 规范的初稿,该规范定义了用于执行渲染和计算等 GPU 操作的 API,以及用于编写在 GPU 上运行的程序的着色器语言。 在概念上类似于 Vulkan、Metal 和 Direct3D 12 API。该规范是由来自 Mozilla、Google、Apple 和 Microsoft 的工程师组成的工作组制定的。

从概念上讲,WebGPU 与 WebGL 的不同之处与 Vulkan 图形 API 与 OpenGL 的不同之处非常相似,但它并不基于特定的图形 API,而是一个通用层,使用与 Vulkan、Metal 和 Vulkan 中相同的低级原语。 Direct3D。 WebGPU 为 JavaScript 应用程序提供对 GPU 命令的组织、处理和传输的低级控制,管理相关资源、内存、缓冲区、纹理对象和编译的图形着色器。 通过这种方法,您可以降低开销成本并提高 GPU 的工作效率,从而实现更高的图形应用程序性能。

WebGPU 使得为 Web 创建复杂的 3D 项目成为可能,其工作效果并不比直接访问 Vulkan、Metal 或 Direct3D 但不依赖于特定平台的独立程序差。 WebGPU 还提供了额外的功能,可以通过编译到 WebAssembly 将本机图形程序移植到支持 Web 的形式。 除了 3D 图形之外,WebGPU 还包括与将计算卸载到 GPU 和执行着色器相关的功能。

WebGPU 的主要特点:

  • 单独管理资源、准备工作以及向 GPU 传输命令(在 WebGL 中,一个对象同时负责所有事情)。 提供了三个独立的上下文: GPUDevice 用于创建纹理和缓冲区等资源; GPUCommandEncoder 用于编码单个命令,包括渲染和计算阶段; GPUCommandBuffer 将排队等待在 GPU 上执行。 结果可以在与一个或多个画布元素关联的区域中呈现,或者在没有输出的情况下进行处理(例如,在运行计算任务时)。 分离阶段可以更轻松地将资源创建和准备操作分离到可以在不同线程上运行的不同处理程序中。
  • 处理状态的不同方法。 WebGPU 提供了两个对象 - GPURenderPipeline 和 GPUComputePipeline,它们允许您组合开发人员预定义的各种状态,这使得浏览器不会将资源浪费在额外的工作上,例如重新编译着色器。 支持的状态包括:着色器、顶点缓冲区和属性布局、粘性组布局、混合、深度和图案以及渲染后输出格式。
  • 绑定模型很像 Vulkan 的资源分组功能。 为了将资源分组在一起,WebGPU 提供了 GPUBindGroup 对象,该对象可以与其他类似对象关联,以便在编写命令时在着色器中使用。 创建此类组允许驱动程序提前执行必要的准备操作,并允许浏览器更快地更改绘制调用之间的资源绑定。 资源绑定的布局可以使用 GPUBindGroupLayout 对象进行预定义。

来源: opennet.ru

添加评论