В
WebGPU 的主要目标是为 Web 平台提供安全、用户友好、可移植和高性能的编程接口,以利用现代系统图形 API 提供的 3D 图形技术和功能,例如 Windows 上的 Direct3D 12、Metal在 macOS 上,以及在 Linux 上的 Vulkan。 从概念上讲,WebGPU 与 WebGL 的不同之处与 Vulkan 与 OpenGL 的不同之处非常相似,同时它并不基于特定的图形 API,而是一个通用层,通常使用与 Vulkan 中相同的低级基元,金属和 Direct3D。
WebGPU 为 JavaScript 应用程序提供对 GPU 命令的组织、处理和传输的较低级别控制,管理相关资源、内存、缓冲区、纹理对象和编译的图形着色器。 通过这种方法,您可以降低开销成本并提高 GPU 的工作效率,从而实现更高的图形应用程序性能。
WebGPU 使得为 Web 创建成熟的复杂 3D 项目成为可能,其工作效果并不比直接访问 Vulkan、Metal 或 Direct3D 但不依赖于特定平台的独立程序差。 通过使用 WebAssembly 技术将本机图形程序移植到支持 Web 的形式时,WebGPU 还提供了附加功能。 除了 3D 图形之外,WebGPU 还涵盖与将计算卸载到 GPU 和支持着色器开发相关的功能。 着色器
WebGPU 使用单独的资源管理、准备工作以及向 GPU 传输命令(在 WebGL 中,一个对象同时负责所有事情)。 提供了三个单独的上下文:
GPUDevice用于创建纹理和缓冲区等资源; GPUCommandEncoder 用于编码单个命令,包括渲染和计算阶段; GPUCommandBuffer 将排队等待在 GPU 上执行。 结果可以在与一个或多个画布元素关联的区域中呈现,或者在没有输出的情况下进行处理(例如,在运行计算任务时)。 分离阶段可以更轻松地将资源创建和准备操作分离到可以在不同线程上运行的不同处理程序中。
WebGPU 和 WebGL 之间的第二个区别是处理状态的方法不同。 WebGPU 提供了两个对象 - GPURenderPipeline 和 GPUComputePipeline,它们允许您组合开发人员预定义的各种状态,这使得浏览器不会将资源浪费在额外的工作上,例如重新编译着色器。 支持的状态包括:着色器、顶点缓冲区和属性布局、粘性组布局、混合、深度和图案以及渲染后输出格式。
WebGPU的第三个特性称为绑定模型,很大程度上
让人想起 Vulkan 中的资源分组工具。
为了将资源分组在一起,WebGPU 提供了 GPUBindGroup 对象,该对象可以与其他类似对象关联,以便在编写命令时在着色器中使用。 创建此类组允许驱动程序提前执行必要的准备操作,并允许浏览器更快地更改绘制调用之间的资源绑定。 资源绑定的布局可以使用 GPUBindGroupLayout 对象进行预定义。
在 Firefox 中,要在 about:config 中启用 WebGPU,有一个设置“dom.webgpu.enabled”。 CanvasContext 渲染还需要启用合成
来源: opennet.ru