0

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

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

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

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

我知道我可以通过试验找到答案,但是任何可以节省我时间的帮助都将不胜感激。

4

1 回答 1

2
  1. Compute Shader 管道独立于Rendering管道运行,即顶点着色器、像素着色器、混合状态等对调用Dispatch(). 但是,它们确实进入同一个队列,因此调用Draw和调用之间的顺序Dispatch被保留。

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

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

于 2014-01-23T19:38:46.647 回答