Orillusion

    • 注册
    • 登录
    • 搜索
    • 版块
    • 最新
    • 标签

    Dawn到底是个什么东西?

    中文社区
    dawn
    4
    8
    539
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 支阿怪
      支阿怪 最后由 shuangliu 编辑

      看源码介绍:
      6cd74d95-3890-4228-9920-c1f3fe287f80-image.png
      翻译出来是:

      Dawn,一个WebGPU实现

      Dawn(以前是NXT)是一个正在开发中的开源和跨平台的WebGPU标准实现。
      它公开了一个几乎一对一映射到WebGPU IDL的C/ c++ API,并且可以作为更大系统(如Web浏览器)的一部分进行管理。

      没有太搞懂概念,也看O的视频教程,说WebGPUAPI传递到Dwan,那为什么不直接用Dwan,实现对GPU的抽象实行渲染计算,还要再高一层去做WebGPU呢?
      5b76dff4-1fd4-4d6e-9ff6-b7af77674cfe-image.png

      没有捷径,自发光芒

      shuangliu 1 条回复 最后回复 回复 引用 0
      • shuangliu
        shuangliu @支阿怪 最后由 shuangliu 编辑

        @wenhao0807

        1. Dawn为什么要包一层?简单说就是为了跨语言/技术栈的需求,如果只是针对native c++程序的调用,Dawn的设计会简单很多,但因为有其他语言和平台调用的需求,比如被浏览器js控制,所以加了很多标准化的设计,比如,整个框架上层还有DawnWire模块,用来跟 js 的沟通(IPC),暴露/映射c++的API给js。

        2. 要理解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暴露/映射到上层语言中

        支阿怪 1 条回复 最后回复 回复 引用 0
        • 支阿怪
          支阿怪 @shuangliu 最后由 编辑

          @shuangliu 感谢解答

          没有捷径,自发光芒

          1 条回复 最后回复 回复 引用 0
          • 寻风觅迹
            寻风觅迹 最后由 编辑

            额,你愿意写CPP调Dawn,还是愿意 await navigator.gpu.requestAdapter()?

            我在快速验证想法的时候,更愿意选择自己更熟悉的 JavaScript API...

            支阿怪 1 条回复 最后回复 回复 引用 0
            • 支阿怪
              支阿怪 @寻风觅迹 最后由 编辑

              @寻风觅迹 如果我用c++调Dawn,是不是要比直接用WebGPU的性能要好呢?

              没有捷径,自发光芒

              shuangliu 1 条回复 最后回复 回复 引用 0
              • shuangliu
                shuangliu @支阿怪 最后由 编辑

                @wenhao0807 是的,直接使用C++ 写native 的应用调用Dawn,要比在web上调用JavaScript API要快一些。1是JS的执行效率不如c++,随便一个for循环或者矩阵就算性能就拉开了,2是js -> native这一层转换也有性能损耗,3是目前web上不方便做多线程处理,而c++直接调用Dawn可以多线程的操作。性能 vs 易用度 vs 开发效率,如何平衡要看最终的场景需求

                支阿怪 1 条回复 最后回复 回复 引用 0
                • 支阿怪
                  支阿怪 @shuangliu 最后由 编辑

                  @shuangliu 👍

                  没有捷径,自发光芒

                  1 条回复 最后回复 回复 引用 0
                  • S
                    shawn0326 最后由 编辑

                    看起来是个WebGPU runtime。未来可以嵌入到类似微信这种大app里面,也可以直接打包成独立app。
                    好像之前很多公司尝试基于WebGL做过runtime,包括微信小游戏这些。

                    1 条回复 最后回复 回复 引用 0
                    • First post
                      Last post

                    Recent Post

                    • 目前可以预览demo了

                      • 阅读更多
                    • A

                      这demo太卡了,我机器性能不算差,运行个demo cpu就将近100%

                      • 阅读更多
                    • A

                      没有贴出app.vue的代码

                      • 阅读更多
                    • @aichangqing 可能是之前版本的cdn缓存没更新,可以清理本地缓存刷新再试一次

                      • 阅读更多
                    • 36e6af78-b023-4031-9b56-bd8713b44393-image.png

                      已经是版本 113.0.5656.0(正式版本)canary (64 位)并且开启chrome://flags/#enable-unsafe-webgpu 为enable,为啥还不能预览demo

                      • 阅读更多

                    Copyright © 2022 Orillusion | Contact US