我即将为我的代码库添加计算着色器支持,并且在查找一些非常基本的问题时遇到问题:
那里的所有文档都说Compute Shader管道独立于GPU运行,但是所有dx11示例代码都使用设备上下文接口来设置着色器本身,资源视图并调用dispatch()方法,所以这些使用其余的渲染命令在命令缓冲区中排队或者它们是否独立执行?
关注问题1,我可以从多个线程调用计算着色器,还是需要缓冲所有计算着色器命令并在创建了直接设备上下文的线程上发出它们?
< / LI>同步。大多数文章都使用CopyResource命令,该命令将自动同步计算着色器完成并为结果提供CPU访问权限,但似乎也会阻止GPU。有更有效的同步方式吗?
我知道我可以通过实验找到答案,但任何能帮助我节省时间的帮助都会受到赞赏。
答案 0 :(得分:2)
Compute Shader管道独立于 Rendering 管道运行,即顶点着色器,像素着色器,混合状态等对调用Dispatch()
时发生的情况没有影响。但是,它们会进入同一个队列,因此保留对Draw
和Dispatch
的调用之间的排序。
所有对直接上下文的调用必须从单个线程完成。
一种常见方法是使用两个缓冲区。当一个正在使用计算着色器进行操作时,另一个正被复制并由CPU读取。大多数GPU都能够并行化。