发布有关集成WebGPU帮助规范的信息 在Firefox的每晚版本中,现在 提供用于3D图形处理的编程接口 在GPU端进行计算,在概念上类似于Vulkan API,metal和Direct3D12。该规范由Mozilla,Google,Apple,Microsoft和由W3C组织创建的工作组的社区代表开发。
WebGPU的主要目标是创建一个安全,方便,便携式和高性能的软件界面 可以在具有3D图形技术的Web平台上使用,并具有现代系统图形API提供的功能,例如Windows上的Direct3D 12,macOS上的Metal和Linux上的Vulkan。
从概念上讲 WebGPU与WebGL的区别与Vulkan与OpenGL的区别相同 而且它不是基于特定的图形API,而是通用层,通常使用Vulkan,Metal和Direct3D中可用的相同低级基元。
在Firefox中,提供了“ dom.webgpu.enabled”设置以启用WebGPU 在约:配置。 除了渲染CanvasContext之外,还需要包含WebRender合成系统(about:config中的“ gfx.webrender.all”)。
WebGPU的实现基于用Rust编写的wgpu项目代码,并且可以在Linux,Android,Windows和macOS上的DX12,Vulkan和Metal API之上工作(正在开发DX11和OpenGL ES 3.0支持)。
关于WebGPU
网络GPU 为JavaScript应用程序提供用于底层控制的工具 关于组织, 处理命令并将其传输到GPU, 管理相关资源,内存,缓冲区,纹理对象和已编译的图形着色器。 这种方法将 支持更高性能的图形应用 通过减少开销并提高使用GPU的效率。
网络GPU 可以为网络创建完整的复杂3D项目 其性能不比直接与Vulkan,Metal或Direct3D通信但与特定平台无关的独立程序差。
还 通过移植本机图形程序提供附加功能 可以基于网络技术运行的形式 通过使用WebAssembly技术。
除了3D图形之外, WebGPU还涵盖了与消除GPU旁的计算相关的可能性 并支持着色器开发。 可以使用WebGPU着色器语言创建着色器或以SPIR-V中间格式指定着色器,然后将其翻译为当前驱动程序支持的着色器语言。
网络GPU 使用单独的资源管理,准备工作和命令传输 到GPU(在WebGL中,一个对象同时负责所有事情)。 提供了三个单独的上下文:GPUDevice,用于创建纹理和缓冲区等资源; GPUCommandEncoder对单个命令进行编码,包括渲染和计算阶段; GPUCommandBuffer排队等待在GPU上执行。
WebGPU和WebGL之间的第二个区别是处理状态的不同方法。 WebGPU中提出了两个对象:GPURenderPipeline和GPUComputePipeline,它们允许组合开发人员预定义的几种状态,这使浏览器不会在其他工作上浪费资源,例如重新编译着色器。 支持的状态包括:着色器,顶点缓冲区和属性布局,附加组布局,混合,深度和图案,渲染后输出格式。
WebGPU的第三个功能是绑定模型,这在很多方面 类似于汇集Vulkan中存在的资源的方法。 为了将资源分组,WebGPU提供了一个GPUBindGroup对象,该对象可以通过键入命令与其他类似对象关联以在着色器中使用。
通过创建此类组,驱动程序可以提前执行必要的准备操作,而浏览器则可以更快地在拉动调用之间切换资源链接。
数据来源: https://hacks.mozilla.org/