Firefox Nightly开始支持WebGPU

在Safari之后,Firefox也宣布开始支持WebGPU,WebGPU是一个新兴的绘图API,用法比WebGL API还要简单,提供由硬件加速的高性能3D绘图,以及资料平行运算功能。

WebGPU由所有浏览器供应商、英特尔以及其他等多个组织,所组成的W3C GPU网页工作群组从头设计,具有安全、可移植性、高性能和高可用性等特色。Safari在去年9月的时候宣布,从其第91版开始支持WebGPU,而在Firefox则是从当前Nightly版本开始支持。

Mozilla提到,WebGPU能让更丰富更复杂的图形应用程序移植到网页中执行,而且也让原本专注开发原生平台应用程序的开发团队,可通过WebAssembly的支持,容易地在网页平台上进行开发。WebGPU构建在诸如Vulkan、D3D12和Metal新兴的图形API之上,向开发者开放低端API基础原语相关功能。

Firefox对WebGPU的支持,其核心逻辑是由获Mozilla协助的Rust社群,所撰写的wgpu-core项目提供,而该项目是以gfx-rs项目为基础,可将类Vulkan的GPU工作负载,转换成D3D12、D3D11、Metal,甚至是OpenGL工作负载。Mozilla表示,他们还在开发着色器基础设施,以应用WebGPU着色语言,将其转换成驱动程序支持的后端着色语言。

想要赶快在Firefox尝试最新的WebGPU功能的用户,可以使用Firefox Nightly并将配置选项dom.webgpu.enabled以及gfx.webrender.all都设为true,就能在具有Vulkan驱动程序的Windows 7、Windows 10、Linux、macOS,以及有支持的Android设备上,执行WebGPU应用程序。

目前Firefox Nightly可以执行大部分基于Google SPIR-V的WebGPU范例,但是由于Mozilla还未实例WebGPU中的GPURenderBundle,因此范例中的animometer还无法执行。Rust社群正在开发wgpu-rs项目,这是以相同的wgpu项目来实例的Rust API,如此便可让许多Rust生态系统中的应用程序,在浏览器中执行,(下图)有影子的绿色方块就是在macOS/Metal中以Firefox Nightly渲染而成。

Mozilla表示,目前Firefox Nightly支持WebGPU还在初期阶段,仍有许多功能尚未实例,像是画面呈现加速功能就是其中一个,目前要将渲染的图像显示到HTML画布中,该图像会先在GPU上渲染,并且读回CPU缓冲区中,并以外部图像提供给WebRender,WebRender会再次将图像内容传入GPU中,最后才在HTML画布上显示;这样的往返是多余的,Mozilla将会制定专门的机制,让WebGPU后端API以及WebRender拥有共享接口。

WebGPU规范的发展仍有许多问题待解决,未解的问题如制定CPU和GPU之间资料传输的API,Mozilla提到,网页平台与原生平台的差异,在于是否能够直接访问系统内存,由于CPU和GPU间资料传输的方式还没取得共识,因此尚有许多提案正在讨论中;WebGPU规范目前还无法被稳定的用于生产环境中,在2020年底有望可出现能用于产品的最低版本。