Dawn到底是个什么东西?
-
看源码介绍:
翻译出来是:Dawn,一个WebGPU实现
Dawn(以前是NXT)是一个正在开发中的开源和跨平台的WebGPU标准实现。
它公开了一个几乎一对一映射到WebGPU IDL的C/ c++ API,并且可以作为更大系统(如Web浏览器)的一部分进行管理。没有太搞懂概念,也看O的视频教程,说WebGPUAPI传递到Dwan,那为什么不直接用Dwan,实现对GPU的抽象实行渲染计算,还要再高一层去做WebGPU呢?
-
@wenhao0807
-
Dawn为什么要包一层?简单说就是为了跨语言/技术栈的需求,如果只是针对native c++程序的调用,Dawn的设计会简单很多,但因为有其他语言和平台调用的需求,比如被浏览器js控制,所以加了很多标准化的设计,比如,整个框架上层还有DawnWire模块,用来跟 js 的沟通(IPC),暴露/映射c++的API给js。
-
要理解Webgpu的标准设计是多家浏览器和机构斗争/平衡的结果,如果只考虑chrome自己用,而不是通用的js标准,那么webgpu和Dawn的设计也会简单很多,但因为要考虑到不同浏览器和平台的设计,webgpu中很多api设计是不得已或者平衡的结果。比如,wgsl是因为apple的坚持,而没有采用主流的glsl或者hls。又比如,commandEncoder这种设计,也是更多为了兼容Metal的API,当然这本身也是符合Web API的设计的
这个问题本质,是如何设计跨语言/平台的框架,目前主流的跨平台标准和框架中,尤其是web -> native的项目,整体结构都差不多,都是底层一套c/c++/rust/python/go...,中间一层 桥梁,这一层主要就是1做数据传递或者语法解析(IPC),2做各个平台兼容处理,最终把底层的API暴露/映射到上层语言中
-
-
@shuangliu 感谢解答
-
额,你愿意写CPP调Dawn,还是愿意
await navigator.gpu.requestAdapter()
?我在快速验证想法的时候,更愿意选择自己更熟悉的 JavaScript API...
-
@寻风觅迹 如果我用c++调Dawn,是不是要比直接用WebGPU的性能要好呢?
-
@wenhao0807 是的,直接使用C++ 写native 的应用调用Dawn,要比在web上调用JavaScript API要快一些。1是JS的执行效率不如c++,随便一个for循环或者矩阵就算性能就拉开了,2是js -> native这一层转换也有性能损耗,3是目前web上不方便做多线程处理,而c++直接调用Dawn可以多线程的操作。性能 vs 易用度 vs 开发效率,如何平衡要看最终的场景需求
-
-
看起来是个WebGPU runtime。未来可以嵌入到类似微信这种大app里面,也可以直接打包成独立app。
好像之前很多公司尝试基于WebGL做过runtime,包括微信小游戏这些。