Dawn到底是个什么东西?
-
@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暴露/映射到上层语言中
-