Orillusion

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

    WebGPU中Indirect Draw的实现

    中文社区
    webgpu api
    2
    2
    180
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • M
      Mr王 最后由 编辑

      Vulkan 提供了一个API IndirectDraw,根据官方github描述,是使用存储绘制命令的设备本地缓冲区,用来进行实例渲染,针对存储在同一个缓冲区中的不同meshes。

      间接绘图卸载绘图命令生成,并提供在 GPU 上更新它们的能力,无需 CPU 再次接触缓冲区,也减少了绘制调用的数量。

      WebGPU是否也提供了相应的API,是否实现了multi indirect draw的功能?

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

        WebGPU有indirectDraw API
        spec: https://www.orillusion.com/zh/webgpu.html#dom-gpurenderencoderbase-drawindirect

        但是目前的WebGPU indirectDraw 只能encode draw command,因为WebGPU buffer中的每一个trunk都只是包含了draw command,而在Vulkan 和 Dx12,在draw command 之后还可以添加bind group等等,这样不仅仅是对draw command进行indirect操作,还可以操控bind group等等。

        就目前的WebGPU标准实现而言,indirectdraw 的意义不是很大,对性能提升不明显,仅仅只是加速draw的缓存而已,不如用 RenderBundle 提前对所有 command list 进行 record 从而提高性能。

        另外目前webgpu还不支持多线程操作,标准计划会支持,但目前的版本还没有实现,所以multi draw/writebuffer/submit encoder/... 都还不支持

        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