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年底有望可出现能用于产品的最低版本

Author: bwh