【问题标题】:Compute Shader basics in dx11dx11 中的计算着色器基础知识
【发布时间】:2014-01-24 03:38:46
【问题描述】:

我即将在我的代码库中添加计算着色器支持,但在寻找一些非常基本的问题的答案时遇到了问题:

  1. 那里的所有文档都说 Compute Shader 管道独立于 GPU 运行,但是所有 dx11 示例代码都使用设备上下文接口来设置着色器本身、资源视图和调用 dispatch() 方法,所以这些与其余渲染命令一起在命令缓冲区中排队,还是独立执行?

  2. 跟进问题 1,我是否可以从多个线程调用计算着色器,还是需要缓冲所有计算着色器命令并在创建直接设备上下文的线程上发出它们?

  3. 同步。大多数文章使用 CopyResource 命令,该命令将自动同步计算着色器完成并让 CPU 访问结果,但似乎这也会阻塞 GPU。有没有更高效的同步方式?

我知道我可以通过试验找到答案,但如果能帮我节省时间,我将不胜感激。

【问题讨论】:

    标签: c++ multithreading directx directcompute


    【解决方案1】:
    1. 计算着色器管道独立于 渲染 管道运行,即顶点着色器、像素着色器、混合状态等对调用 Dispatch() 时发生的情况没有影响。但是,它们确实进入了同一个队列,因此对 DrawDispatch 的调用之间的顺序被保留。

    2. 对直接上下文的所有调用都必须从单个线程中完成。

    3. 一种常见的方法是使用两个缓冲区。当一个正在使用计算着色器进行操作时,另一个正在被复制回来并由 CPU 读取。大多数 GPU 都可以并行处理。

    【讨论】:

    • 我明白了,那么当我调用 Present() 时会发生什么?计算着色器管道的行为是否与渲染管道相同?意义
    • 我明白了,如果我有一个计算着色器排队并且我调用 Present() 会发生什么?它会在计算着色器完成执行之前停止吗?基本上可以运行跨越多个渲染帧的计算着色器吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    相关资源
    最近更新 更多